home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / doc / libslang2 / slangfun.txt < prev    next >
Text File  |  2007-10-28  |  225KB  |  8,891 lines

  1. all
  2.  
  3.  SYNOPSIS
  4.   Tests if all elements of an array are non-zero
  5.  
  6.  USAGE
  7.   Char_Type all (Array_Type a [,Int_Type dim])
  8.  
  9.  DESCRIPTION
  10.   The `all' function examines the elements of a numeric array and
  11.   returns 1 if all elements are non-zero, otherwise it returns 0. If a
  12.   second argument is given, then it specifies the dimension of the
  13.   array over which the function is to be applied.  In this case, the
  14.   result will be an array with the same shape as the input array minus
  15.   the specified dimension.
  16.  
  17.  EXAMPLE
  18.   Consider the 2-d array
  19.  
  20.       1       2       3       4        5
  21.       6       7       8       9       10
  22.  
  23.   generated by
  24.  
  25.       a = _reshape ([1:10], [2, 5]);
  26.  
  27.   Then `all(a)' will return 1, and `all(a>3, 0)' will return
  28.   a 1-d array
  29.  
  30.       [0, 0, 0, 1, 1]
  31.  
  32.   Similarly, `all(a>3, 1)' will return the 1-d array
  33.  
  34.       [0,1]
  35.  
  36.  
  37.  SEE ALSO
  38.   where, any
  39.  
  40. --------------------------------------------------------------
  41.  
  42. any
  43.  
  44.  SYNOPSIS
  45.   Test if any element of an array is non-zero
  46.  
  47.  USAGE
  48.   Char_Type any (Array_Type a [,Int_Type dim])
  49.  
  50.  DESCRIPTION
  51.   The `any' function examines the elements of a numeric array and
  52.   returns 1 if any element is both non-zero and not a NaN, otherwise
  53.   it returns 0.  If a second argument is given, then it specifies
  54.   the dimension of the array to be tested.
  55.  
  56.  EXAMPLE
  57.   Consider the 2-d array
  58.  
  59.       1       2       3       4        5
  60.       6       7       8       9       10
  61.  
  62.   generated by
  63.  
  64.       a = _reshape ([1:10], [2, 5]);
  65.  
  66.   Then `any(a==3)' will return 1, and `any(a==3, 0)'
  67.   will return a 1-d array with elements:
  68.  
  69.       0        0       1       0       0
  70.  
  71.  
  72.  SEE ALSO
  73.   where, all
  74.  
  75. --------------------------------------------------------------
  76.  
  77. array_info
  78.  
  79.  SYNOPSIS
  80.   Returns information about an array
  81.  
  82.  USAGE
  83.   (Array_Type, Integer_Type, DataType_Type) array_info (Array_Type a)
  84.  
  85.  DESCRIPTION
  86.   The `array_info' function returns information about the array `a'.
  87.   It returns three values: an 1-d integer array specifying the
  88.   size of each dimension of `a', the number of dimensions of
  89.   `a', and the data type of `a'.
  90.  
  91.  EXAMPLE
  92.   The `array_info' function may be used to find the number of rows
  93.   of an array:
  94.  
  95.     define num_rows (a)
  96.     {
  97.        variable dims, num_dims, data_type;
  98.  
  99.        (dims, num_dims, data_type) = array_info (a);
  100.        return dims [0];
  101.     }
  102.  
  103.  
  104.  SEE ALSO
  105.   typeof, array_info, array_shape, length, reshape, _reshape
  106.  
  107. --------------------------------------------------------------
  108.  
  109. array_map
  110.  
  111.  SYNOPSIS
  112.   Apply a function to each element of an array
  113.  
  114.  USAGE
  115.   Array_Type array_map (type, func, arg0, ...)
  116.  
  117.     DataType_Type type;
  118.     Ref_Type func;
  119.  
  120.  
  121.  DESCRIPTION
  122.   The `array_map' function may be used to apply a function to each
  123.   element of an array and returns the resulting values as an array of
  124.   the specified type.  The `type' parameter indicates what kind of
  125.   array should be returned and generally corresponds to the return
  126.   type of the function.  The `arg0' parameter should be an array
  127.   and is used to determine the dimensions of the resulting array.  If
  128.   any subsequent arguments correspond to an array of the same size,
  129.   then those array elements will be passed in parallel with the first
  130.   arrays arguments.
  131.  
  132.  EXAMPLE
  133.   The first example illustrates how to apply the `strlen' function
  134.   to an array of strings:
  135.  
  136.      S = ["", "Train", "Subway", "Car"];
  137.      L = array_map (Integer_Type, &strlen, S);
  138.  
  139.   This is equivalent to:
  140.  
  141.      S = ["", "Train", "Subway", "Car"];
  142.      L = Integer_Type [length (S)];
  143.      for (i = 0; i < length (S); i++) L[i] = strlen (S[i]);
  144.  
  145.  
  146.   Now consider an example involving the `strcat' function:
  147.  
  148.      files = ["slang", "slstring", "slarray"];
  149.  
  150.      exts = ".c";
  151.      cfiles = array_map (String_Type, &strcat, files, exts);
  152.      % ==> cfiles = ["slang.c", "slstring.c", "slarray.c"];
  153.  
  154.      exts =  [".a",".b",".c"];
  155.      xfiles = array_map (String_Type, &strcat, files, exts);
  156.      % ==> xfiles = ["slang.a", "slstring.b", "slarray.c"];
  157.  
  158.  
  159.  NOTES
  160.   Many mathematical functions already work transparantly on arrays.
  161.   For example, the following two statements produce identical results:
  162.  
  163.      B = sin (A);
  164.      B = array_map (Double_Type, &sin, A);
  165.  
  166.  
  167.  SEE ALSO
  168.   array_info, strlen, strcat, sin
  169.  
  170. --------------------------------------------------------------
  171.  
  172. array_reverse
  173.  
  174.  SYNOPSIS
  175.   Reverse the elements of an array
  176.  
  177.  USAGE
  178.   array_reverse (Array_Type a [,Int_Type i0, Int_Type i1] [,Int_Type dim])
  179.  
  180.  DESCRIPTION
  181.   In its simplest form, the `array_reverse' function reverses the
  182.   elements of an array.  If passed 2 or 4 arguments,
  183.   `array_reverse' reverses the elements of the specified
  184.   dimension of a multi-dimensional array.  If passed 3 or 4 arguments,
  185.   the parameters `i0' and `i1' specify a range of elements
  186.   to reverse.
  187.  
  188.  EXAMPLE
  189.   If `a' is a one dimensional array, then
  190.  
  191.     array_reverse (a, i, j);
  192.     a[[i:j]] = a[[j:i:-1]];
  193.  
  194.   are equivalent to one another.  However, the form using
  195.   `array_reverse' is about 10 times faster than the version that
  196.   uses explicit array indexing.
  197.  
  198.  SEE ALSO
  199.   array_swap, transpose
  200.  
  201. --------------------------------------------------------------
  202.  
  203. array_shape
  204.  
  205.  SYNOPSIS
  206.   Get the shape or dimensions of an array
  207.  
  208.  USAGE
  209.   dims = array_shape (Array_Type a)
  210.  
  211.  DESCRIPTION
  212.    This function returns an array representing the dimensionality or
  213.    shape of a specified array.  The `array_info' function also
  214.    returns this information but for many purposes the
  215.    `array_shape' function is more convenient.
  216.  
  217.  SEE ALSO
  218.   array_info, reshape
  219.  
  220. --------------------------------------------------------------
  221.  
  222. array_sort
  223.  
  224.  SYNOPSIS
  225.   Sort an array
  226.  
  227.  USAGE
  228.   Array_Type array_sort (Array_Type a [, String_Type or Ref_Type f])
  229.  
  230.  DESCRIPTION
  231.   `array_sort' sorts the array `a' into ascending order and
  232.   returns an integer array that represents the result of the sort. If
  233.   the optional second parameter `f' is present, the function
  234.   specified by `f' will be used to compare elements of `a';
  235.   otherwise, a built-in sorting function will be used.
  236.  
  237.   If `f' is present, then it must be either a string representing
  238.   the name of the comparison function, or a reference to the function.
  239.   The sort function represented by `f' must be a S-Lang function
  240.   that takes two arguments.  The function must return an integer that
  241.   is less than zero if the first parameter is considered to be less
  242.   than the second, zero if they are equal, and a value greater than
  243.   zero if the first is greater than the second.
  244.  
  245.   If the comparison function is not specified, then a built-in comparison
  246.   function appropriate for the data type will be used.  For example,
  247.   if `a' is an array of character strings, then the sort will be
  248.   performed using the `strcmp' function.
  249.  
  250.   The integer array returned by this function is simply an index array
  251.   that indicates the order of the sorted array.  The input array
  252.   `a' is not changed.
  253.  
  254.  EXAMPLE
  255.   An array of strings may be sorted using the `strcmp' function
  256.   since it fits the specification for the sorting function described
  257.   above:
  258.  
  259.      A = ["gamma", "alpha", "beta"];
  260.      I = array_sort (A, &strcmp);
  261.  
  262.   Alternatively, one may use
  263.  
  264.      variable I = array_sort (A);
  265.  
  266.   to use the built-in comparison function.
  267.  
  268.   After the `array_sort' has executed, the variable `I' will
  269.   have the values `[2, 0, 1]'.  This array can be used to
  270.   re-shuffle the elements of `A' into the sorted order via the
  271.   array index expression `A = A[I]'.  This operation may also be
  272.   written:
  273.  
  274.      A = A[array_sort(A)];
  275.  
  276.  
  277.  SEE ALSO
  278.   strcmp
  279.  
  280. --------------------------------------------------------------
  281.  
  282. array_swap
  283.  
  284.  SYNOPSIS
  285.   Swap elements of an array
  286.  
  287.  USAGE
  288.   array_swap (Array_Type a, Int_Type i, Int_Type j)
  289.  
  290.  DESCRIPTION
  291.   The `array_swap' function swaps the specified elements of an
  292.   array.  It is equivalent to
  293.  
  294.     (a[i], a[j]) = (a[j], a[i]);
  295.  
  296.   except that it executes several times faster than the above construct.
  297.  
  298.  SEE ALSO
  299.   array_reverse, transpose
  300.  
  301. --------------------------------------------------------------
  302.  
  303. cumsum
  304.  
  305.  SYNOPSIS
  306.   Compute the cumulative sum of an array
  307.  
  308.  USAGE
  309.   result = cumsum (Array_Type a [, Int_Type dim])
  310.  
  311.  DESCRIPTION
  312.   The `cumsum' function performs a cumulative sum over the
  313.   elements of a numeric array and returns the result.  If a second
  314.   argument is given, then it specifies the dimension of the array to
  315.   be summed over.  For example, the cumulative sum of
  316.   `[1,2,3,4]', is the array `[1,1+2,1+2+3,1+2+3+4]', i.e.,
  317.   `[1,3,6,10]'.
  318.  
  319.  SEE ALSO
  320.   sum
  321.  
  322. --------------------------------------------------------------
  323.  
  324. init_char_array
  325.  
  326.  SYNOPSIS
  327.   Initialize an array of characters
  328.  
  329.  USAGE
  330.   init_char_array (Array_Type a, String_Type s)
  331.  
  332.  DESCRIPTION
  333.   The `init_char_array' function may be used to initialize a
  334.   character array `a' by setting the elements of the array
  335.   `a' to the corresponding characters of the string `s'.
  336.  
  337.  EXAMPLE
  338.   The statements
  339.  
  340.      variable a = Char_Type [10];
  341.      init_char_array (a, "HelloWorld");
  342.  
  343.    creates an character array and initializes its elements to the
  344.    characters in the string `"HelloWorld"'.
  345.  
  346.  NOTES
  347.    The character array must be large enough to hold all the characters
  348.    of the initialization string.
  349.  
  350.  SEE ALSO
  351.   bstring_to_array, strlen, strcat
  352.  
  353. --------------------------------------------------------------
  354.  
  355. _isnull
  356.  
  357.  SYNOPSIS
  358.   Check an array for NULL elements
  359.  
  360.  USAGE
  361.   Char_Type[] = _isnull (a[])
  362.  
  363.  DESCRIPTION
  364.   This function may be used to test for the presence of NULL elements
  365.   of an array.   Specifically, it returns a Char_Type array of
  366.   with the same number of elements and dimensionality of the input
  367.   array.  If an element of the input array is NULL, then the
  368.   corresponding element of the output array will be set to 1,
  369.   otherwise it will be set to 0.
  370.  
  371.  EXAMPLE
  372.   Set all NULL elements of a string array `A' to the empty
  373.   string `""':
  374.  
  375.      A[where(_isnull(A))] = "";
  376.  
  377.  
  378.  NOTES
  379.   It is important to understand the difference between `A==NULL'
  380.   and `_isnull(A)'.  The latter tests all elements of `A'
  381.   against NULL, whereas the former only tests `A' itself.
  382.  
  383.  SEE ALSO
  384.   where, array_map
  385.  
  386. --------------------------------------------------------------
  387.  
  388. length
  389.  
  390.  SYNOPSIS
  391.   Get the length of an object
  392.  
  393.  USAGE
  394.   Integer_Type length (obj)
  395.  
  396.  DESCRIPTION
  397.   The `length' function may be used to get information about the
  398.   length of an object.  For simple scalar data-types, it returns 1.
  399.   For arrays, it returns the total number of elements of the array.
  400.  
  401.  NOTES
  402.   If `obj' is a string, `length' returns 1 because a
  403.   String_Type object is considered to be a scalar.  To get the
  404.   number of characters in a string, use the `strlen' function.
  405.  
  406.  SEE ALSO
  407.   array_info, array_shape, typeof, strlen
  408.  
  409. --------------------------------------------------------------
  410.  
  411. max
  412.  
  413.  SYNOPSIS
  414.   Get the maximum value of an array
  415.  
  416.  USAGE
  417.   result = max (Array_Type a [,Int_Type dim])
  418.  
  419.  DESCRIPTION
  420.   The `max' function examines the elements of a numeric array and
  421.   returns the value of the largest element.  If a second argument is
  422.   given, then it specifies the dimension of the array to be searched.
  423.   In this case, an array of dimension one less than that of the input array
  424.   will be returned with the corresponding elements in the specified
  425.   dimension replaced by the maximum value in that dimension.
  426.  
  427.  EXAMPLE
  428.   Consider the 2-d array
  429.  
  430.       1       2       3       4        5
  431.       6       7       8       9       10
  432.  
  433.   generated by
  434.  
  435.       a = _reshape ([1:10], [2, 5]);
  436.  
  437.   Then `max(a)' will return `10', and `max(a,0)' will return
  438.   a 1-d array with elements
  439.  
  440.       6       7       8       9       10
  441.  
  442.  
  443.  NOTES
  444.   This function ignores NaNs in the input array.
  445.  
  446.  SEE ALSO
  447.   min, sum, reshape
  448.  
  449. --------------------------------------------------------------
  450.  
  451. min
  452.  
  453.  SYNOPSIS
  454.   Get the minimum value of an array
  455.  
  456.  USAGE
  457.   result = min (Array_Type a [,Int_Type dim])
  458.  
  459.  DESCRIPTION
  460.   The `min' function examines the elements of a numeric array and
  461.   returns the value of the smallest element.  If a second argument is
  462.   given, then it specifies the dimension of the array to be searched.
  463.   In this case, an array of dimension one less than that of the input array
  464.   will be returned with the corresponding elements in the specified
  465.   dimension replaced by the minimum value in that dimension.
  466.  
  467.  EXAMPLE
  468.   Consider the 2-d array
  469.  
  470.       1       2       3       4       5
  471.       6       7       8       9       10
  472.  
  473.   generated by
  474.  
  475.       a = _reshape ([1:10], [2, 5]);
  476.  
  477.   Then `min(a)' will return `1', and `min(a,0)' will return
  478.   a 1-d array with elements
  479.  
  480.       1        2       3       4       5
  481.  
  482.  
  483.  NOTES
  484.   This function ignores NaNs in the input array.
  485.  
  486.  SEE ALSO
  487.   max, sum, reshape
  488.  
  489. --------------------------------------------------------------
  490.  
  491. _reshape
  492.  
  493.  SYNOPSIS
  494.   Copy an array to a new shape
  495.  
  496.  USAGE
  497.   Array_Type _reshape (Array_Type A, Array_Type I)
  498.  
  499.  DESCRIPTION
  500.   The `_reshape' function creates a copy of an array `A',
  501.   reshapes it to the form specified by `I' and returns the result.
  502.   The elements of `I' specify the new dimensions of the copy of
  503.   `A' and must be consistent with the number of elements `A'.
  504.  
  505.  EXAMPLE
  506.   If `A' is a `100' element 1-d array, a new 2-d array of
  507.   size `20' by `5' may be created from the elements of `A'
  508.   by
  509.  
  510.       B = _reshape (A, [20, 5]);
  511.  
  512.  
  513.  NOTES
  514.   The `reshape' function performs a similar function to
  515.   `_reshape'.  In fact, the `_reshape' function could have been
  516.   implemented via:
  517.  
  518.      define _reshape (a, i)
  519.      {
  520.         a = @a;     % Make a new copy
  521.         reshape (a, i);
  522.         return a;
  523.      }
  524.  
  525.  
  526.  SEE ALSO
  527.   reshape, array_shape, array_info
  528.  
  529. --------------------------------------------------------------
  530.  
  531. reshape
  532.  
  533.  SYNOPSIS
  534.   Reshape an array
  535.  
  536.  USAGE
  537.   reshape (Array_Type A, Array_Type I)
  538.  
  539.  DESCRIPTION
  540.   The `reshape' function changes the shape of `A' to have the
  541.   shape specified by the 1-d integer array `I'.  The elements of `I'
  542.   specify the new dimensions of `A' and must be consistent with
  543.   the number of elements `A'.
  544.  
  545.  EXAMPLE
  546.   If `A' is a `100' element 1-d array, it can be changed to a
  547.   2-d `20' by `5' array via
  548.  
  549.       reshape (A, [20, 5]);
  550.  
  551.   However, `reshape(A, [11,5])' will result in an error because
  552.   the `[11,5]' array specifies `55' elements.
  553.  
  554.  NOTES
  555.   Since `reshape' modifies the shape of an array, and arrays are
  556.   treated as references, then all references to the array will
  557.   reference the new shape.  If this effect is unwanted, then use the
  558.   `_reshape' function instead.
  559.  
  560.  SEE ALSO
  561.   _reshape, array_info, array_shape
  562.  
  563. --------------------------------------------------------------
  564.  
  565. sum
  566.  
  567.  SYNOPSIS
  568.   Sum over the elements of an array
  569.  
  570.  USAGE
  571.   result = sum (Array_Type a [, Int_Type dim])
  572.  
  573.  DESCRIPTION
  574.   The `sum' function sums over the elements of a numeric array and
  575.   returns its result.  If a second argument is given, then it
  576.   specifies the dimension of the array to be summed over.  In this
  577.   case, an array of dimension one less than that of the input array
  578.   will be returned.
  579.  
  580.   If the input array is an integer type, then the resulting value will
  581.   be a Double_Type.  If the input array is a Float_Type,
  582.   then the result will be a Float_Type.
  583.  
  584.  EXAMPLE
  585.   The mean of an array `a' of numbers is
  586.  
  587.     sum(a)/length(a)
  588.  
  589.  
  590.  SEE ALSO
  591.   cumsum, transpose, reshape
  592.  
  593. --------------------------------------------------------------
  594.  
  595. transpose
  596.  
  597.  SYNOPSIS
  598.   Transpose an array
  599.  
  600.  USAGE
  601.   Array_Type transpose (Array_Type a)
  602.  
  603.  DESCRIPTION
  604.   The `transpose' function returns the transpose of a specified
  605.   array.  By definition, the transpose of an array, say one with
  606.   elements `a[i,j,...k]' is an array whose elements are
  607.   `a[k,...,j,i]'.
  608.  
  609.  SEE ALSO
  610.   _reshape, reshape, sum, array_info, array_shape
  611.  
  612. --------------------------------------------------------------
  613.  
  614. where
  615.  
  616.  USAGE
  617.   Array_Type where (Array_Type a [, Ref_Type jp])
  618.  
  619.  DESCRIPTION
  620.   The `where' function examines a numeric array `a' and
  621.   returns an integer array giving the indices of `a'
  622.   where the corresponding element of `a' is non-zero.  The
  623.   function accepts an optional Ref_Type argument that will be
  624.   set to complement set of indices, that is, the indices where
  625.   `a' is zero.  In fact
  626.  
  627.      i = where (a);
  628.      j = where (not a);
  629.  
  630.   and
  631.  
  632.      i = where (a, &j);
  633.  
  634.   are equivalent, but the latter form is prefered since it executes
  635.   about twice as fast as the former.
  636.  
  637.   Although this function may appear to be simple or even trivial, it
  638.   is arguably one of the most important and powerful functions for
  639.   manipulating arrays.
  640.  
  641.  EXAMPLE
  642.   Consider the following:
  643.  
  644.     variable X = [0.0:10.0:0.01];
  645.     variable A = sin (X);
  646.     variable I = where (A < 0.0);
  647.     A[I] = cos (X) [I];
  648.  
  649.   Here the variable `X' has been assigned an array of doubles
  650.   whose elements range from `0.0' through `10.0' in
  651.   increments of `0.01'.  The second statement assigns `A' to
  652.   an array whose elements are the `sin' of the elements of `X'.
  653.   The third statement uses the `where' function to get the indices of
  654.   the elements of `A' that are less than 0.  Finally, the
  655.   last statement replaces those elements of `A' by the cosine of the
  656.   corresponding elements of `X'.
  657.  
  658.  NOTES
  659.   Support for the optional argument was added to version 2.1.0.
  660.  
  661.  SEE ALSO
  662.   wherefirst, wherelast, wherenot, array_info, array_shape, _isnull
  663.  
  664. --------------------------------------------------------------
  665.  
  666. wherenot
  667.  
  668.  SYNOPSIS
  669.   Get indices where a numeric array is 0
  670.  
  671.  USAGE
  672.   Array_Type wherenot (Array_Type)
  673.  
  674.  DESCRIPTION
  675.   This function is equivalent to `where(not a)'.  See the
  676.   documentation for `where' for more information.
  677.  
  678.  SEE ALSO
  679.   where, wherefirst, wherelast
  680.  
  681. --------------------------------------------------------------
  682.  
  683. wherefirst
  684.  
  685.  SYNOPSIS
  686.   Get the index of the first non-zero array element
  687.  
  688.  USAGE
  689.   Int_Type wherefirst (Array_Type a [,start_index])
  690.  
  691.  DESCRIPTION
  692.   The `wherefirst' function returns the index of the first
  693.   non-zero element of a specified array.  If the optional parameter
  694.   `start_index' is given, the search will take place starting
  695.   from that index.  If a non-zero element is not found, the function
  696.   will return NULL.
  697.  
  698.  NOTES
  699.   The single parameter version of this function is equivalent to
  700.  
  701.      define wherefirst (a)
  702.      {
  703.         variable i = where (a);
  704.         if (length(i))
  705.           return i[0];
  706.         else
  707.           return NULL;
  708.      }
  709.  
  710.  
  711.  SEE ALSO
  712.   where, wherelast
  713.  
  714. --------------------------------------------------------------
  715.  
  716. wherelast
  717.  
  718.  SYNOPSIS
  719.   Get the index of the last non-zero array element
  720.  
  721.  USAGE
  722.   Int_Type wherelast (Array_Type a [,start_index])
  723.  
  724.  DESCRIPTION
  725.   The `wherelast' function returns the index of the last
  726.   non-zero element of a specified array.  If the optional parameter
  727.   `start_index' is given, the backward search will take place starting
  728.   from that index.  If a non-zero element is not found, the function
  729.   will return NULL.
  730.  
  731.  NOTES
  732.   The single parameter version of this function is equivalent to
  733.  
  734.      define wherefirst (a)
  735.      {
  736.         variable i = where (a);
  737.         if (length(i))
  738.           return i[-1];
  739.         else
  740.           return NULL;
  741.      }
  742.  
  743.  
  744.  SEE ALSO
  745.   where, wherefirst
  746.  
  747. --------------------------------------------------------------
  748.  
  749. assoc_delete_key
  750.  
  751.  SYNOPSIS
  752.   Delete a key from an Associative Array
  753.  
  754.  USAGE
  755.   assoc_delete_key (Assoc_Type a, String_Type k)
  756.  
  757.  DESCRIPTION
  758.   The `assoc_delete_key' function deletes a key given by `k'
  759.   from the associative array `a'.  If the specified key does not
  760.   exist in `a', then this function has no effect.
  761.  
  762.  SEE ALSO
  763.   assoc_key_exists, assoc_get_keys
  764.  
  765. --------------------------------------------------------------
  766.  
  767. assoc_get_keys
  768.  
  769.  SYNOPSIS
  770.   Return all the key names of an Associative Array
  771.  
  772.  USAGE
  773.   String_Type[] assoc_get_keys (Assoc_Type a)
  774.  
  775.  DESCRIPTION
  776.   This function returns all the key names of an associative array
  777.   `a' as an ordinary one dimensional array of strings.  If the
  778.   associative array contains no keys, an empty array will be returned.
  779.  
  780.  SEE ALSO
  781.   assoc_get_values, assoc_key_exists, assoc_delete_key, length
  782.  
  783. --------------------------------------------------------------
  784.  
  785. assoc_get_values
  786.  
  787.  SYNOPSIS
  788.   Return all the values of an Associative Array
  789.  
  790.  USAGE
  791.   Array_Type assoc_get_keys (Assoc_Type a)
  792.  
  793.  DESCRIPTION
  794.   This function returns all the values in the associative array
  795.   `a' as an array of proper type.  If the associative array
  796.   contains no keys, an empty array will be returned.
  797.  
  798.  EXAMPLE
  799.   Suppose that `a' is an associative array of type
  800.   Integer_Type, i.e., it was created via
  801.  
  802.       variable a = Assoc_Type[Integer_Type];
  803.  
  804.   The the following may be used to print the values of the array in
  805.   ascending order:
  806.  
  807.       static define int_sort_fun (x, y)
  808.       {
  809.          return sign (x - y);
  810.       }
  811.       define sort_and_print_values (a)
  812.       {
  813.          variable v = assoc_get_values (a);
  814.          variable i = array_sort (v, &int_sort_fun);
  815.          v = v[i];
  816.          foreach (v)
  817.            {
  818.               variable vi = ();
  819.               () = fprintf (stdout, "%d\n", vi);
  820.            }
  821.       }
  822.  
  823.  
  824.  SEE ALSO
  825.   assoc_get_values, assoc_key_exists, assoc_delete_key, array_sort
  826.  
  827. --------------------------------------------------------------
  828.  
  829. assoc_key_exists
  830.  
  831.  SYNOPSIS
  832.   Check to see whether a key exists in an Associative Array
  833.  
  834.  USAGE
  835.   Integer_Type assoc_key_exists (Assoc_Type a, String_Type k)
  836.  
  837.  DESCRIPTION
  838.   The `assoc_key_exists' function may be used to determine whether
  839.   or not a specified key `k' exists in an associative array `a'.
  840.   It returns 1 if the key exists, or 0 if it does not.
  841.  
  842.  SEE ALSO
  843.   assoc_get_keys, assoc_get_values, assoc_delete_key
  844.  
  845. --------------------------------------------------------------
  846.  
  847. array_to_bstring
  848.  
  849.  SYNOPSIS
  850.   Convert an array to a binary string
  851.  
  852.  USAGE
  853.   BString_Type array_to_bstring (Array_Type a)
  854.  
  855.  DESCRIPTION
  856.    The `array_to_bstring' function returns the elements of an
  857.    array `a' as a binary string.
  858.  
  859.  SEE ALSO
  860.   bstring_to_array, init_char_array
  861.  
  862. --------------------------------------------------------------
  863.  
  864. bstring_to_array
  865.  
  866.  SYNOPSIS
  867.   Convert a binary string to an array of characters
  868.  
  869.  USAGE
  870.   UChar_Type[] bstring_to_array (BString_Type b)
  871.  
  872.  DESCRIPTION
  873.    The `bstring_to_array' function returns an array of unsigned
  874.    characters whose elements correspond to the characters in the
  875.    binary string.
  876.  
  877.  SEE ALSO
  878.   array_to_bstring, init_char_array
  879.  
  880. --------------------------------------------------------------
  881.  
  882. bstrlen
  883.  
  884.  SYNOPSIS
  885.   Get the length of a binary string
  886.  
  887.  USAGE
  888.   UInt_Type bstrlen (BString_Type s)
  889.  
  890.  DESCRIPTION
  891.   The `bstrlen' function may be used to obtain the length of a
  892.   binary string.  A binary string differs from an ordinary string (a C
  893.   string) in that a binary string may include null chracters.
  894.  
  895.  EXAMPLE
  896.  
  897.     s = "hello\0";
  898.     len = bstrlen (s);      % ==> len = 6
  899.     len = strlen (s);       % ==> len = 5
  900.  
  901.  
  902.  SEE ALSO
  903.   strlen, length
  904.  
  905. --------------------------------------------------------------
  906.  
  907. pack
  908.  
  909.  SYNOPSIS
  910.   Pack objects into a binary string
  911.  
  912.  USAGE
  913.   BString_Type pack (String_Type fmt, ...)
  914.  
  915.  DESCRIPTION
  916.   The `pack' function combines zero or more objects (represented
  917.   by the ellipses above) into a binary string according to the format
  918.   string `fmt'.
  919.  
  920.   The format string consists of one or more data-type specification
  921.   characters defined by the following table:
  922.  
  923.      c     char
  924.      C     unsigned char
  925.      h     short
  926.      H     unsigned short
  927.      i     int
  928.      I     unsigned int
  929.      l     long
  930.      L     unsigned long
  931.      m     long long
  932.      M     unsigned long long
  933.      j     16 bit int
  934.      J     16 bit unsigned int
  935.      k     32 bit int
  936.      K     32 bit unsigned int
  937.      q     64 bit int
  938.      Q     64 bit unsigned int
  939.      f     float
  940.      d     double
  941.      F     32 bit float
  942.      D     64 bit float
  943.      s     character string, null padded
  944.      S     character string, space padded
  945.      z     character string, null padded
  946.      x     a null pad character
  947.  
  948.   A decimal length specifier may follow the data-type specifier.  With
  949.   the exception of the `s' and `S' specifiers, the length
  950.   specifier indicates how many objects of that data type are to be
  951.   packed or unpacked from the string.  When used with the `s',
  952.   `S', or `z' specifiers, it indicates the field width to be
  953.   used.  If the length specifier is not present, the length defaults
  954.   to one.
  955.  
  956.   When packing, unlike the `s' specifier, the `z' specifier
  957.   guarantees that at least one null byte will be written even if the
  958.   field has to be truncated to do so.
  959.  
  960.   With the exception of `c', `C', `s', `S', and
  961.   `x', each of these may be prefixed by a character that indicates
  962.   the byte-order of the object:
  963.  
  964.      >    big-endian order (network order)
  965.      <    little-endian order
  966.      =    native byte-order
  967.  
  968.   The default is to use native byte order.
  969.  
  970.   When unpacking via the `unpack' function, if the length
  971.   specifier is greater than one, then an array of that length will be
  972.   returned.  In addition, trailing whitespace and null characters are
  973.   stripped when unpacking an object given by the `S' specifier.
  974.   Trailing null characters will be stripped from an object represented
  975.   by the `z' specifier.  No such stripping is performed by the `s'
  976.   specifier.
  977.  
  978.  EXAMPLE
  979.  
  980.      a = pack ("cc", 'A', 'B');         % ==> a = "AB";
  981.      a = pack ("c2", 'A', 'B');         % ==> a = "AB";
  982.      a = pack ("xxcxxc", 'A', 'B');     % ==> a = "\0\0A\0\0B";
  983.      a = pack ("h2", 'A', 'B');         % ==> a = "\0A\0B" or "\0B\0A"
  984.      a = pack (">h2", 'A', 'B');        % ==> a = "\0\xA\0\xB"
  985.      a = pack ("<h2", 'A', 'B');        % ==> a = "\0B\0A"
  986.      a = pack ("s4", "AB", "CD");       % ==> a = "AB\0\0"
  987.      a = pack ("s4s2", "AB", "CD");     % ==> a = "AB\0\0CD"
  988.      a = pack ("S4", "AB", "CD");       % ==> a = "AB  "
  989.      a = pack ("S4S2", "AB", "CD");     % ==> a = "AB  CD"
  990.      a = pack ("z4", "AB");             % ==> a = "AB\0\0"
  991.      a = pack ("s4", "ABCDEFG");        % ==> a = "ABCD"
  992.      a = pack ("z4", "ABCDEFG");        % ==> a = "ABC\0"
  993.  
  994.  
  995.  SEE ALSO
  996.   unpack, sizeof_pack, pad_pack_format, sprintf
  997.  
  998. --------------------------------------------------------------
  999.  
  1000. pad_pack_format
  1001.  
  1002.  SYNOPSIS
  1003.   Add padding to a pack format
  1004.  
  1005.  USAGE
  1006.   BString_Type pad_pack_format (String_Type fmt)
  1007.  
  1008.  DESCRIPTION
  1009.   The `pad_pack_format' function may be used to add the
  1010.   appropriate padding characters to the format `fmt' such that the
  1011.   data types specified by the format will be properly aligned on word
  1012.   boundaries.  This is especially important when reading or writing files
  1013.   that assume the native alignment.
  1014.  
  1015.  SEE ALSO
  1016.   pack, unpack, sizeof_pack
  1017.  
  1018. --------------------------------------------------------------
  1019.  
  1020. sizeof_pack
  1021.  
  1022.  SYNOPSIS
  1023.   Compute the size implied by a pack format string
  1024.  
  1025.  USAGE
  1026.   UInt_Type sizeof_pack (String_Type fmt)
  1027.  
  1028.  DESCRIPTION
  1029.   The `sizeof_pack' function returns the size of the binary string
  1030.   represented by the format string `fmt'.  This information may be
  1031.   needed when reading a structure from a file.
  1032.  
  1033.  SEE ALSO
  1034.   pack, unpack, pad_pack_format
  1035.  
  1036. --------------------------------------------------------------
  1037.  
  1038. unpack
  1039.  
  1040.  SYNOPSIS
  1041.   Unpack Objects from a Binary String
  1042.  
  1043.  USAGE
  1044.   (...) = unpack (String_Type fmt, BString_Type s)
  1045.  
  1046.  DESCRIPTION
  1047.   The `unpack' function unpacks objects from a binary string
  1048.   `s' according to the format `fmt' and returns the objects to
  1049.   the stack in the order in which they were unpacked.  See the
  1050.   documentation of the `pack' function for details about the
  1051.   format string.
  1052.  
  1053.  EXAMPLE
  1054.  
  1055.     (x,y) = unpack ("cc", "AB");          % ==> x = 'A', y = 'B'
  1056.     x = unpack ("c2", "AB");              % ==> x = ['A', 'B']
  1057.     x = unpack ("x<H", "\0\xAB\xCD");     % ==> x = 0xCDABuh
  1058.     x = unpack ("xxs4", "a b c\0d e f");  % ==> x = "b c\0"
  1059.     x = unpack ("xxS4", "a b c\0d e f");  % ==> x = "b c"
  1060.  
  1061.  
  1062.  SEE ALSO
  1063.   pack, sizeof_pack, pad_pack_format
  1064.  
  1065. --------------------------------------------------------------
  1066.  
  1067. Assoc_Type
  1068.  
  1069.  SYNOPSIS
  1070.   An associative array or hash type
  1071.  
  1072.  DESCRIPTION
  1073.   An Assoc_Type object is like an array except that it is
  1074.   indexed using strings and not integers.  Unlike an Array_Type
  1075.   object, the size of an associative array is not fixed, but grows as
  1076.   objects are added to the array.  Another difference is that ordinary
  1077.   arrays represent ordered object; however, the ordering of the
  1078.   elements of an `Assoc_Type' object is unspecified.
  1079.  
  1080.   An Assoc_Type object whose elements are of some data-type
  1081.   `d' may be created using using
  1082.  
  1083.     A = Assoc_Type[d];
  1084.  
  1085.   For example,
  1086.  
  1087.     A = Assoc_Type[Int_Type];
  1088.  
  1089.   will create an associative array of integers.  To create an
  1090.   associative array capable of storing an arbitrary type, use the form
  1091.  
  1092.     A = Assoc_Type[];
  1093.  
  1094.  
  1095.   An optional parameter may be used to specify a default value for
  1096.   array elements.  For example,
  1097.  
  1098.    A = Assoc_Type[Int_Type, -1];
  1099.  
  1100.   creates an integer-valued associative array with a default element
  1101.   value of -1.  Then `A["foo"]' will return -1 if the key
  1102.   `"foo"' does not exist in the array.  Default values are
  1103.   available only if the type was specified when the associative array
  1104.   was created.
  1105.  
  1106.   The following functions may be used with associative arrays:
  1107.  
  1108.     assoc_get_keys
  1109.     assoc_get_values
  1110.     assoc_key_exists
  1111.     assoc_delete_key
  1112.  
  1113.   The `length' function may be used to obtain the number of
  1114.   elements in the array.
  1115.  
  1116.   The `foreach' construct may be used with associative arrays via
  1117.   on of the following forms:
  1118.  
  1119.       foreach k,v (A) {...}
  1120.       foreach k (A) using ("keys") { ... }
  1121.       foreach v (A) using ("values") { ... }
  1122.       foreach k,v (A) using ("keys", "values") { ... }
  1123.  
  1124.   In all the above forms, the loop is over all elements of the array
  1125.   such that `v=A[k]'.
  1126.  
  1127.  SEE ALSO
  1128.   List_Type, Array_Type, Struct_Type
  1129.  
  1130. --------------------------------------------------------------
  1131.  
  1132. List_Type
  1133.  
  1134.  SYNOPSIS
  1135.   A list object
  1136.  
  1137.  DESCRIPTION
  1138.   An object of type `List_Type' represents a list, which is
  1139.   defined as an ordered heterogeneous collection of objects.
  1140.   A list may be created using, e.g.,
  1141.  
  1142.     empty_list = {};
  1143.     list_with_4_items = {[1:10], "three", 9, {1,2,3}};
  1144.  
  1145.   Note that the last item of the list in the last example is also a
  1146.   list.  A List_Type object may be manipulated by the following
  1147.   functions:
  1148.  
  1149.     list_new
  1150.     list_insert
  1151.     list_append
  1152.     list_delete
  1153.     list_reverse
  1154.     list_pop
  1155.  
  1156.   A `List_Type' object may be indexed using an array syntax with
  1157.   the first item on the list given by an index of 0.  The
  1158.   `length' function may be used to obtain the number of elements
  1159.   in the list.
  1160.  
  1161.   A copy of the list may be created using the @ operator, e.g.,
  1162.   `copy = @list'.
  1163.  
  1164.   The `foreach' statement may be used with a List_Type
  1165.   object to loop over its elements:
  1166.  
  1167.     foreach elem (list) {....}
  1168.  
  1169.  
  1170.  SEE ALSO
  1171.   Array_Type, Assoc_Type, Struct_Type
  1172.  
  1173. --------------------------------------------------------------
  1174.  
  1175. String_Type
  1176.  
  1177.  SYNOPSIS
  1178.   A string object
  1179.  
  1180.  DESCRIPTION
  1181.   An object of type `String_Type' represents a string of bytes or
  1182.   characters, which in general have different semantics depending upon
  1183.   the UTF-8 mode.
  1184.  
  1185.   The string obeys byte-semantics when indexed as an
  1186.   array.  That is, `S[0]' will return the first byte of the
  1187.   string `S'.  For character semantics, the nth character in the
  1188.   string may be obtained using `substr' function.
  1189.  
  1190.   The `foreach' statement may be used with a String_Type
  1191.   object `S' to loop over its bytes:
  1192.  
  1193.     foreach b (S) {....}
  1194.     foreach b (S) using ("bytes") {....}
  1195.  
  1196.   To loop over its characters, the following form may be used:
  1197.  
  1198.     foreach c (S) using ("chars") {...}
  1199.  
  1200.   When UTF-8 mode is not in effect, the byte and character forms will
  1201.   produce the same sequence.  Otherwise, the string will be decoded
  1202.   to generate the (wide) character sequence.  If the string contains
  1203.   an invalid UTF-8 encoded character, sucessive bytes of the invalid
  1204.   sequence will be returned as negative integers.  For example,
  1205.   `"a\xAB\x{AB}"' specifies a string composed of the character
  1206.   `a', a byte `0xAB', and the character `0xAB'.  In
  1207.   this case,
  1208.  
  1209.      foreach c ("a\xAB\x{AB}") {...}
  1210.  
  1211.   will produce the integer-valued sequence `'a', -0xAB, 0xAB'.
  1212.  
  1213.  SEE ALSO
  1214.   Array_Type, _slang_utf8_ok
  1215.  
  1216. --------------------------------------------------------------
  1217.  
  1218. Struct_Type
  1219.  
  1220.  SYNOPSIS
  1221.   A structure datatype
  1222.  
  1223.  DESCRIPTION
  1224.   A Struct_Type object with fields `f1', `f2',...,
  1225.   `fN' may be created using
  1226.  
  1227.     s = struct { f1, f2, ..., fN };
  1228.  
  1229.   The fields may be accessed via the "dot" operator, e.g.,
  1230.  
  1231.      s.f1 = 3;
  1232.      if (s12.f1 == 4) s.f1++;
  1233.  
  1234.   By default, all fields will be initialized to NULL.
  1235.  
  1236.   A structure may also be created using the dereference operator (@):
  1237.  
  1238.     s = @Struct_Type ("f1", "f2", ..., "fN");
  1239.     s = @Struct_Type ( ["f1", "f2", ..., "fN"] );
  1240.  
  1241.   Functions for manipulating structure fields include:
  1242.  
  1243.      _push_struct_field_values
  1244.      get_struct_field
  1245.      get_struct_field_names
  1246.      set_struct_field
  1247.      set_struct_fields
  1248.  
  1249.  
  1250.   The `foreach' loop may be used to loop over elements of a linked
  1251.   list.  Suppose that first structure in the list is called
  1252.   `root', and that the `child' field is used to form the
  1253.   chain.  Then one may walk the list using:
  1254.  
  1255.      foreach s (root) using ("child")
  1256.       {
  1257.          % s will take on successive values in the list
  1258.           .
  1259.           .
  1260.       }
  1261.  
  1262.   The loop will terminate when the last elements `child' field is
  1263.   NULL.  If no ``linking'' field is specified, the field name will
  1264.   default to `next'.
  1265.  
  1266.   User-defined data types are similar to the `Struct_Type'.  A
  1267.   type, e.g., `Vector_Type' may be created using:
  1268.  
  1269.     typedef struct { x, y, z } Vector_Type;
  1270.  
  1271.   Objects of this type may be created via the @ operator, e.g.,
  1272.  
  1273.     v = @Vector_Type;
  1274.  
  1275.   It is recommended that this be used in a function for creating such
  1276.   types, e.g.,
  1277.  
  1278.     define vector (x, y, z)
  1279.     {
  1280.        variable v = @Vector_Type;
  1281.        v.x = x;
  1282.        v.y = y;
  1283.        v.z = z;
  1284.        return v;
  1285.     }
  1286.  
  1287.   The action of the binary and unary operators may be defined for such
  1288.   types.  Consider the "+" operator.  First define a function for
  1289.   adding two `Vector_Type' objects:
  1290.  
  1291.     static define vector_add (v1, v2)
  1292.     {
  1293.        return vector (v1.x+v2.x, v1.y+v2.y, v1.z, v2.z);
  1294.     }
  1295.  
  1296.   Then use
  1297.  
  1298.     __add_binary ("+", Vector_Type, &vector_add, Vector_Type, Vector_Type);
  1299.  
  1300.   to indicate that the function is to be called whenever the "+"
  1301.   binary operation between two `Vector_Type' objects takes place,
  1302.   e.g.,
  1303.  
  1304.     V1 = vector (1, 2, 3);
  1305.     V2 = vector (8, 9, 1);
  1306.     V3 = V1 + V2;
  1307.  
  1308.   will assigned the vector (9, 11, 4) to `V3'.  Similarly, the
  1309.   `"*"' operator between scalars and vectors may be defined using:
  1310.  
  1311.     static define vector_scalar_mul (v, a)
  1312.     {
  1313.        return vector (a*v.x, a*v.y, a*v.z);
  1314.     }
  1315.     static define scalar_vector_mul (a, v)
  1316.     {
  1317.        return vector_scalar_mul (v, a);
  1318.     }
  1319.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  1320.     __add_binary ("*", Vector_Type, &vector_scalar_mul, Vector_Type, Any_Type);
  1321.  
  1322.   Related functions include:
  1323.  
  1324.     __add_unary
  1325.     __add_string
  1326.     __add_destroy
  1327.  
  1328.  
  1329.  SEE ALSO
  1330.   List_Type, Assoc_Type
  1331.  
  1332. --------------------------------------------------------------
  1333.  
  1334. _bofeof_info
  1335.  
  1336.  SYNOPSIS
  1337.   Control the generation of function callback code
  1338.  
  1339.  USAGE
  1340.   Int_Type _bofeof_info
  1341.  
  1342.  DESCRIPTION
  1343.  This value of this variable dictates whether or not the S-Lang
  1344.  interpeter will generate code to call the beginning and end of
  1345.  function callback handlers.  The value of this variable is local to
  1346.  the compilation unit, but is inherited by other units loaded by the
  1347.  current unit.
  1348.  
  1349.  If the value of this variable is 1 when a function is defined, then
  1350.  when the function is executed, the callback handlers defined via
  1351.  `_set_bof_handler' and `_set_eof_handler' will be called.
  1352.  
  1353.  SEE ALSO
  1354.   _set_bof_handler, _set_eof_handler, _boseos_info
  1355.  
  1356. --------------------------------------------------------------
  1357.  
  1358. _boseos_info
  1359.  
  1360.  SYNOPSIS
  1361.   Control the generation of BOS/EOS callback code
  1362.  
  1363.  USAGE
  1364.   Int_Type _boseos_info
  1365.  
  1366.  DESCRIPTION
  1367.  This value of this variable dictates whether or not the S-Lang
  1368.  interpeter will generate code to call the beginning and end of
  1369.  statement callback handlers.  The value of this variable is local to
  1370.  the compilation unit, but is inherited by other units loaded by the
  1371.  current unit.
  1372.  
  1373.  The value of `_boseos_info' controls the generation of code for
  1374.  callbacks as follows:
  1375.  
  1376.    Value      Description
  1377.    -----------------------------------------------------------------
  1378.      0        No code for making callbacks will be produced.
  1379.      1        Callback generation will take place for all non-branching
  1380.               and looping statements.
  1381.      2        Same as for 1 with the addition that code will also be
  1382.               generated for branching statements (if, !if, loop, ...)
  1383.      3        Same as 2, but also including break and continue
  1384.               statements.
  1385.  
  1386.  A non-branching statement is one that does not effect chain of
  1387.  execution.  Branching statements include all looping statements,
  1388.  conditional statement, `break', `continue', and `return'.
  1389.  
  1390.  EXAMPLE
  1391.  Consider the following:
  1392.  
  1393.    _boseos_info = 1;
  1394.    define foo ()
  1395.    {
  1396.       if (some_expression)
  1397.         some_statement;
  1398.    }
  1399.    _boseos_info = 2;
  1400.    define bar ()
  1401.    {
  1402.       if (some_expression)
  1403.         some_statement;
  1404.    }
  1405.  
  1406.  The function `foo' will be compiled with code generated to call the
  1407.  BOS and EOS handlers when `some_statement' is executed.  The
  1408.  function `bar' will be compiled with code to call the handlers
  1409.  for both `some_expression' and `some_statement'.
  1410.  
  1411.  NOTES
  1412.  The `sldb' debugger and `slsh''s `stkcheck.sl' make use of this
  1413.  facility.
  1414.  
  1415.  SEE ALSO
  1416.   _set_bos_handler, _set_eos_handler, _bofeof_info
  1417.  
  1418. --------------------------------------------------------------
  1419.  
  1420. _clear_error
  1421.  
  1422.  SYNOPSIS
  1423.   Clear an error condition (deprecated)
  1424.  
  1425.  USAGE
  1426.   _clear_error ()
  1427.  
  1428.  DESCRIPTION
  1429.   This function has been deprecated.  New code should make use of
  1430.   try-catch exception handling.
  1431.  
  1432.   This function may be used in error-blocks to clear the error that
  1433.   triggered execution of the error block.  Execution resumes following
  1434.   the statement, in the scope of the error-block, that triggered the
  1435.   error.
  1436.  
  1437.  EXAMPLE
  1438.   Consider the following wrapper around the `putenv' function:
  1439.  
  1440.     define try_putenv (name, value)
  1441.     {
  1442.        variable status;
  1443.        ERROR_BLOCK
  1444.         {
  1445.           _clear_error ();
  1446.           status = -1;
  1447.         }
  1448.        status = 0;
  1449.        putenv (sprintf ("%s=%s", name, value);
  1450.        return status;
  1451.     }
  1452.  
  1453.   If `putenv' fails, it generates an error condition, which the
  1454.   `try_putenv' function catches and clears.  Thus `try_putenv'
  1455.   is a function that returns -1 upon failure and 0 upon
  1456.   success.
  1457.  
  1458.  SEE ALSO
  1459.   _trace_function, _slangtrace, _traceback
  1460.  
  1461. --------------------------------------------------------------
  1462.  
  1463. _set_bof_handler
  1464.  
  1465.  SYNOPSIS
  1466.   Set the beginning of function callback handler
  1467.  
  1468.  USAGE
  1469.   _set_bof_handler (Ref_Type func)
  1470.  
  1471.  DESCRIPTION
  1472.  This function is used to set the function to be called prior to the
  1473.  execution of the body S-Lang function but after its arguments have
  1474.  been evaluated, provided that function was defined
  1475.  with `_bofeof_info' set appropriately.  The callback function
  1476.  must be defined to take a single parameter representing the name of
  1477.  the function and must return nothing.
  1478.  
  1479.  EXAMPLE
  1480.  
  1481.     private define bof_handler (fun)
  1482.     {
  1483.       () = fputs ("About to execute $fun"$, stdout);
  1484.     }
  1485.     _set_bos_handler (&bof_handler);
  1486.  
  1487.  
  1488.  NOTES
  1489.  
  1490.  SEE ALSO
  1491.   _set_eof_handler, _boseos_info, _set_bos_handler
  1492.  
  1493. --------------------------------------------------------------
  1494.  
  1495. _set_bos_handler
  1496.  
  1497.  SYNOPSIS
  1498.   Set the beginning of statement callback handler
  1499.  
  1500.  USAGE
  1501.   _set_bos_handler (Ref_Type func)
  1502.  
  1503.  DESCRIPTION
  1504.  This function is used to set the function to be called prior to the
  1505.  beginning of a statement.  The function will be passed two
  1506.  parameters: the name of the file and the line number of the statement
  1507.  to be executed.  It should return nothing.
  1508.  
  1509.  EXAMPLE
  1510.  
  1511.     private define bos_handler (file, line)
  1512.     {
  1513.       () = fputs ("About to execute $file:$line\n"$, stdout);
  1514.     }
  1515.     _set_bos_handler (&bos_handler);
  1516.  
  1517.  
  1518.  NOTES
  1519.  The beginning and end of statement handlers will be called for
  1520.  statements in a file only if that file was compiled with the variable
  1521.  `_boseos_info' set to a non-zero value.
  1522.  
  1523.  SEE ALSO
  1524.   _set_eos_handler, _boseos_info, _bofeof_info
  1525.  
  1526. --------------------------------------------------------------
  1527.  
  1528. _set_eof_handler
  1529.  
  1530.  SYNOPSIS
  1531.   Set the beginning of function callback handler
  1532.  
  1533.  USAGE
  1534.   _set_eof_handler (Ref_Type func)
  1535.  
  1536.  DESCRIPTION
  1537.  This function is used to set the function to be called at the end of
  1538.  execution of a S-Lang function, provided that function was compiled with
  1539.  `_bofeof_info' set accordingly.
  1540.  
  1541.  The callback function will be passed no parameters and it must return
  1542.  nothing.
  1543.  
  1544.  EXAMPLE
  1545.  
  1546.    private define eof_handler ()
  1547.    {
  1548.      () = fputs ("Done executing the function\n", stdout);
  1549.    }
  1550.    _set_eof_handler (&eof_handler);
  1551.  
  1552.  
  1553.  SEE ALSO
  1554.   _set_bof_handler, _bofeof_info, _boseos_info
  1555.  
  1556. --------------------------------------------------------------
  1557.  
  1558. _set_eos_handler
  1559.  
  1560.  SYNOPSIS
  1561.   Set the end of statement callback handler
  1562.  
  1563.  USAGE
  1564.   _set_eos_handler (Ref_Type func)
  1565.  
  1566.  DESCRIPTION
  1567.  This function is used to set the function to be called at the end of
  1568.  a statement.  The function will be passed no parameters and it should
  1569.  return nothing.
  1570.  
  1571.  EXAMPLE
  1572.  
  1573.    private define eos_handler ()
  1574.    {
  1575.      () = fputs ("Done executing the statement\n", stdout);
  1576.    }
  1577.    _set_eos_handler (&eos_handler);
  1578.  
  1579.  
  1580.  NOTES
  1581.  The beginning and end of statement handlers will be called for
  1582.  statements in a file only if that file was compiled with the variable
  1583.  `_boseos_info' set to a non-zero value.
  1584.  
  1585.  SEE ALSO
  1586.   _set_bos_handler, _boseos_info, _bofeof_info
  1587.  
  1588. --------------------------------------------------------------
  1589.  
  1590. _slangtrace
  1591.  
  1592.  SYNOPSIS
  1593.   Turn function tracing on or off
  1594.  
  1595.  USAGE
  1596.   Integer_Type _slangtrace
  1597.  
  1598.  DESCRIPTION
  1599.   The `_slangtrace' variable is a debugging aid that when set to a
  1600.   non-zero value enables tracing when function declared by
  1601.   `_trace_function' is entered.  If the value is greater than
  1602.   zero, both intrinsic and user defined functions will get traced.
  1603.   However, if set to a value less than zero, intrinsic functions will
  1604.   not get traced.
  1605.  
  1606.  SEE ALSO
  1607.   _trace_function, _traceback, _print_stack
  1608.  
  1609. --------------------------------------------------------------
  1610.  
  1611. _traceback
  1612.  
  1613.  SYNOPSIS
  1614.   Generate a traceback upon error
  1615.  
  1616.  USAGE
  1617.   Integer_Type _traceback
  1618.  
  1619.  DESCRIPTION
  1620.   `_traceback' is an intrinsic integer variable whose bitmapped value
  1621.   controls the generation of the call-stack traceback upon error.
  1622.   When set to 0, no traceback will be generated.  Otherwise its value
  1623.   is the bitwise-or of the following integers:
  1624.  
  1625.        1        Create a full traceback
  1626.        2        Omit local variable information
  1627.        4        Generate just one line of traceback
  1628.  
  1629.   The default value of this variable is 4.
  1630.  
  1631.  NOTES
  1632.   Running `slsh' with the `-g' option causes this variable to be
  1633.   set to 1.
  1634.  
  1635.  SEE ALSO
  1636.   _boseos_info
  1637.  
  1638. --------------------------------------------------------------
  1639.  
  1640. _trace_function
  1641.  
  1642.  SYNOPSIS
  1643.   Set the function to trace
  1644.  
  1645.  USAGE
  1646.   _trace_function (String_Type f)
  1647.  
  1648.  DESCRIPTION
  1649.   `_trace_function' declares that the S-Lang function with name
  1650.   `f' is to be traced when it is called.  Calling
  1651.   `_trace_function' does not in itself turn tracing on.  Tracing
  1652.   is turned on only when the variable `_slangtrace' is non-zero.
  1653.  
  1654.  SEE ALSO
  1655.   _slangtrace, _traceback
  1656.  
  1657. --------------------------------------------------------------
  1658.  
  1659. chdir
  1660.  
  1661.  SYNOPSIS
  1662.   Change the current working directory
  1663.  
  1664.  USAGE
  1665.   Int_Type chdir (String_Type dir)
  1666.  
  1667.  DESCRIPTION
  1668.   The `chdir' function may be used to change the current working
  1669.   directory to the directory specified by `dir'.  Upon success it
  1670.   returns zero.  Upon failure it returns `-1' and sets
  1671.   `errno' accordingly.
  1672.  
  1673.  SEE ALSO
  1674.   mkdir, stat_file
  1675.  
  1676. --------------------------------------------------------------
  1677.  
  1678. chmod
  1679.  
  1680.  SYNOPSIS
  1681.   Change the mode of a file
  1682.  
  1683.  USAGE
  1684.   Int_Type chmod (String_Type file, Int_Type mode)
  1685.  
  1686.  DESCRIPTION
  1687.   The `chmod' function changes the permissions of the specified
  1688.   file to those given by `mode'.  It returns `0' upon
  1689.   success, or `-1' upon failure setting `errno' accordingly.
  1690.  
  1691.   See the system specific documentation for the C library
  1692.   function `chmod' for a discussion of the `mode' parameter.
  1693.  
  1694.  SEE ALSO
  1695.   chown, stat_file
  1696.  
  1697. --------------------------------------------------------------
  1698.  
  1699. chown
  1700.  
  1701.  SYNOPSIS
  1702.   Change the owner of a file
  1703.  
  1704.  USAGE
  1705.   Int_Type chown (String_Type file, Int_Type uid, Int_Type gid)
  1706.  
  1707.  DESCRIPTION
  1708.   The `chown' function is used to change the user-id and group-id of
  1709.   `file' to `uid' and `gid', respectively.  It returns
  1710.   0 upon success and -1 upon failure, with `errno'
  1711.   set accordingly.
  1712.  
  1713.  NOTES
  1714.   On most systems, only the superuser can change the ownership of a
  1715.   file.
  1716.  
  1717.   Some systems do not support this function.
  1718.  
  1719.  SEE ALSO
  1720.   chmod, stat_file
  1721.  
  1722. --------------------------------------------------------------
  1723.  
  1724. getcwd
  1725.  
  1726.  SYNOPSIS
  1727.   Get the current working directory
  1728.  
  1729.  USAGE
  1730.   String_Type getcwd ()
  1731.  
  1732.  DESCRIPTION
  1733.   The `getcwd' function returns the absolute pathname of the
  1734.   current working directory.  If an error occurs or it cannot
  1735.   determine the working directory, it returns NULL and sets
  1736.   `errno' accordingly.
  1737.  
  1738.  NOTES
  1739.   Under Unix, OS/2, and MSDOS, the pathname returned by this function
  1740.   includes the trailing slash character.  It may also include
  1741.   the drive specifier for systems where that is meaningful.
  1742.  
  1743.  SEE ALSO
  1744.   mkdir, chdir, errno
  1745.  
  1746. --------------------------------------------------------------
  1747.  
  1748. hardlink
  1749.  
  1750.  SYNOPSIS
  1751.   Create a hard-link
  1752.  
  1753.  USAGE
  1754.   Int_Type hardlink (String_Type oldpath, String_Type newpath)
  1755.  
  1756.  DESCRIPTION
  1757.   The `hardlink' function creates a hard-link called
  1758.   `newpath' to the existing file `oldpath'.  If the link was
  1759.   sucessfully created, the function will return 0.  Upon error, the
  1760.   function returns -1 and sets `errno' accordingly.
  1761.  
  1762.  NOTES
  1763.   Not all systems support the concept of a hard-link.
  1764.  
  1765.  SEE ALSO
  1766.   symlink
  1767.  
  1768. --------------------------------------------------------------
  1769.  
  1770. listdir
  1771.  
  1772.  SYNOPSIS
  1773.   Get a list of the files in a directory
  1774.  
  1775.  USAGE
  1776.   String_Type[] listdir (String_Type dir)
  1777.  
  1778.  DESCRIPTION
  1779.   The `listdir' function returns the directory listing of all the
  1780.   files in the specified directory `dir' as an array of strings.
  1781.   It does not return the special files `".."' and `"."' as
  1782.   part of the list.
  1783.  
  1784.  SEE ALSO
  1785.   stat_file, stat_is, length
  1786.  
  1787. --------------------------------------------------------------
  1788.  
  1789. lstat_file
  1790.  
  1791.  SYNOPSIS
  1792.   Get information about a symbolic link
  1793.  
  1794.  USAGE
  1795.   Struct_Type lstat_file (String_Type file)
  1796.  
  1797.  DESCRIPTION
  1798.   The `lstat_file' function behaves identically to `stat_file'
  1799.   but if `file' is a symbolic link, `lstat_file' returns
  1800.   information about the link itself, and not the file that it
  1801.   references.
  1802.  
  1803.   See the documentation for `stat_file' for more information.
  1804.  
  1805.  NOTES
  1806.   On systems that do not support symbolic links, there is no
  1807.   difference between this function and the `stat_file' function.
  1808.  
  1809.  SEE ALSO
  1810.   stat_file, readlink
  1811.  
  1812. --------------------------------------------------------------
  1813.  
  1814. mkdir
  1815.  
  1816.  SYNOPSIS
  1817.   Create a new directory
  1818.  
  1819.  USAGE
  1820.   Int_Type mkdir (String_Type dir [,Int_Type mode])
  1821.  
  1822.  DESCRIPTION
  1823.   The `mkdir' function creates a directory whose name is specified
  1824.   by the `dir' parameter with permissions given by the optional
  1825.   `mode' parameter.  Upon success `mkdir' returns 0, or it
  1826.   returns `-1' upon failure setting `errno' accordingly.  In
  1827.   particular, if the directory already exists, the function will fail
  1828.   and set errno to EEXIST.
  1829.  
  1830.  EXAMPLE
  1831.  
  1832.      define my_mkdir (dir)
  1833.      {
  1834.         if (0 == mkdir (dir)) return;
  1835.         if (errno == EEXIST) return;
  1836.         throw IOError,
  1837.            sprintf ("mkdir %s failed: %s", dir, errno_string (errno));
  1838.      }
  1839.  
  1840.  
  1841.  NOTES
  1842.   The `mode' parameter may not be meaningful on all systems.  On
  1843.   systems where it is meaningful, the actual permissions on the newly
  1844.   created directory are modified by the process's umask.
  1845.  
  1846.  SEE ALSO
  1847.   rmdir, getcwd, chdir, fopen, errno
  1848.  
  1849. --------------------------------------------------------------
  1850.  
  1851. readlink
  1852.  
  1853.  SYNOPSIS
  1854.   String_Type readlink (String_Type path)
  1855.  
  1856.  USAGE
  1857.   Get the value of a symbolic link
  1858.  
  1859.  DESCRIPTION
  1860.   The `readlink' function returns the value of a symbolic link.
  1861.   Upon failure, NULL is returned and `errno' set accordingly.
  1862.  
  1863.  NOTES
  1864.   Not all systems support this function.
  1865.  
  1866.  SEE ALSO
  1867.   symlink, lstat_file, stat_file, stat_is
  1868.  
  1869. --------------------------------------------------------------
  1870.  
  1871. remove
  1872.  
  1873.  SYNOPSIS
  1874.   Delete a file
  1875.  
  1876.  USAGE
  1877.   Int_Type remove (String_Type file)
  1878.  
  1879.  DESCRIPTION
  1880.   The `remove' function deletes a file.  It returns 0 upon
  1881.   success, or -1 upon error and sets `errno' accordingly.
  1882.  
  1883.  SEE ALSO
  1884.   rename, rmdir
  1885.  
  1886. --------------------------------------------------------------
  1887.  
  1888. rename
  1889.  
  1890.  SYNOPSIS
  1891.   Rename a file
  1892.  
  1893.  USAGE
  1894.   Int_Type rename (String_Type old, String_Type new)
  1895.  
  1896.  DESCRIPTION
  1897.   The `rename' function renames a file from `old' to `new'
  1898.   moving it between directories if necessary.  This function may fail
  1899.   if the directories are not on the same file system.  It returns
  1900.   0 upon success, or -1 upon error and sets `errno' accordingly.
  1901.  
  1902.  SEE ALSO
  1903.   remove, errno
  1904.  
  1905. --------------------------------------------------------------
  1906.  
  1907. rmdir
  1908.  
  1909.  SYNOPSIS
  1910.   Remove a directory
  1911.  
  1912.  USAGE
  1913.   Int_Type rmdir (String_Type dir)
  1914.  
  1915.  DESCRIPTION
  1916.   The `rmdir' function deletes the specified directory.  It returns
  1917.   0 upon success or -1 upon error and sets `errno' accordingly.
  1918.  
  1919.  NOTES
  1920.   The directory must be empty before it can be removed.
  1921.  
  1922.  SEE ALSO
  1923.   rename, remove, mkdir
  1924.  
  1925. --------------------------------------------------------------
  1926.  
  1927. stat_file
  1928.  
  1929.  SYNOPSIS
  1930.   Get information about a file
  1931.  
  1932.  USAGE
  1933.   Struct_Type stat_file (String_Type file)
  1934.  
  1935.  DESCRIPTION
  1936.   The `stat_file' function returns information about `file'
  1937.   through the use of the system `stat' call.  If the stat call
  1938.   fails, the function returns NULL and sets errno accordingly.
  1939.   If it is successful, it returns a stat structure with the following
  1940.   integer-value fields:
  1941.  
  1942.     st_dev
  1943.     st_ino
  1944.     st_mode
  1945.     st_nlink
  1946.     st_uid
  1947.     st_gid
  1948.     st_rdev
  1949.     st_size
  1950.     st_atime
  1951.     st_mtime
  1952.     st_ctime
  1953.  
  1954.   See the C library documentation of `stat' for a discussion of the
  1955.   meanings of these fields.
  1956.  
  1957.  EXAMPLE
  1958.   The following example shows how the `stat_file' function may be
  1959.   used to get the size of a file:
  1960.  
  1961.      define file_size (file)
  1962.      {
  1963.         variable st;
  1964.         st = stat_file(file);
  1965.         if (st == NULL)
  1966.           throw IOError, "Unable to stat $file"$;
  1967.         return st.st_size;
  1968.      }
  1969.  
  1970.  
  1971.  SEE ALSO
  1972.   lstat_file, stat_is
  1973.  
  1974. --------------------------------------------------------------
  1975.  
  1976. stat_is
  1977.  
  1978.  SYNOPSIS
  1979.   Parse the st_mode field of a stat structure
  1980.  
  1981.  USAGE
  1982.   Char_Type stat_is (String_Type type, Int_Type st_mode)
  1983.  
  1984.  DESCRIPTION
  1985.   The `stat_is' function returns a boolean value according to
  1986.   whether or not the `st_mode' parameter is of the specified type.
  1987.   Specifically, `type' must be one of the strings:
  1988.  
  1989.      "sock"     (socket)
  1990.      "fifo"     (fifo)
  1991.      "blk"      (block device)
  1992.      "chr"      (character device)
  1993.      "reg"      (regular file)
  1994.      "lnk"      (link)
  1995.      "dir"      (dir)
  1996.  
  1997.   It returns a non-zero value if `st_mode' corresponds to
  1998.   `type'.
  1999.  
  2000.  EXAMPLE
  2001.   The following example illustrates how to use the `stat_is'
  2002.   function to determine whether or not a file is a directory:
  2003.  
  2004.      define is_directory (file)
  2005.      {
  2006.         variable st;
  2007.  
  2008.         st = stat_file (file);
  2009.         if (st == NULL) return 0;
  2010.         return stat_is ("dir", st.st_mode);
  2011.      }
  2012.  
  2013.  
  2014.  SEE ALSO
  2015.   stat_file, lstat_file
  2016.  
  2017. --------------------------------------------------------------
  2018.  
  2019. symlink
  2020.  
  2021.  SYNOPSIS
  2022.   Create a symbolic link
  2023.  
  2024.  USAGE
  2025.   status = symlink (String_Type oldpath, String_Type new_path)
  2026.  
  2027.  DESCRIPTION
  2028.   The `symlink' function may be used to create a symbolic link
  2029.   named `new_path' for  `oldpath'.  If successful, the function
  2030.   returns 0, otherwise it returns -1 and sets `errno' appropriately.
  2031.  
  2032.  NOTES
  2033.   This function is not supported on all systems and even if supported,
  2034.   not all file systems support the concept of a symbolic link.
  2035.  
  2036.  SEE ALSO
  2037.   readlink, hardlink
  2038.  
  2039. --------------------------------------------------------------
  2040.  
  2041. _$
  2042.  
  2043.  SYNOPSIS
  2044.   Expand the dollar-escaped variables in a string
  2045.  
  2046.  USAGE
  2047.   String_Type _$(String_Type s)
  2048.  
  2049.  DESCRIPTION
  2050.  This function expands the dollar-escaped variables in a string and
  2051.  returns the resulting string.
  2052.  
  2053.  EXAMPLE
  2054.  Consider the following code fragment:
  2055.  
  2056.      private variable Format = "/tmp/foo-$time.$pid";
  2057.      define make_filename ()
  2058.      {
  2059.         variable pid = getpid ();
  2060.         variable time = _time ();
  2061.         return _$(Format);
  2062.      }
  2063.  
  2064.  Note that the variable `Format' contains dollar-escaped
  2065.  variables, but because the `$' suffix was omitted from the
  2066.  string literal, the variables are not expanded.  Instead expansion is
  2067.  deferred until execution of the `make_filename' function through
  2068.  the use of the `_$' function.
  2069.  
  2070.  SEE ALSO
  2071.   eval, getenv
  2072.  
  2073. --------------------------------------------------------------
  2074.  
  2075. autoload
  2076.  
  2077.  SYNOPSIS
  2078.   Load a function from a file
  2079.  
  2080.  USAGE
  2081.   autoload (String_Type funct, String_Type file)
  2082.  
  2083.  DESCRIPTION
  2084.   The `autoload' function is used to declare `funct' to the
  2085.   interpreter and indicate that it should be loaded from `file'
  2086.   when it is actually used.  If `func' contains a namespace
  2087.   prefix, then the file will be loaded into the corresponding
  2088.   namespace.  Otherwise, if the `autoload' function is called
  2089.   from an execution namespace that is not the Global namespace nor an
  2090.   anonymous namespace, then the file will be loaded into the execution
  2091.   namespace.
  2092.  
  2093.  EXAMPLE
  2094.     Suppose `bessel_j0' is a function defined in the file
  2095.     `bessel.sl'.  Then the statement
  2096.  
  2097.       autoload ("bessel_j0", "bessel.sl");
  2098.  
  2099.     will cause `bessel.sl' to be loaded prior to the execution of
  2100.     `bessel_j0'.
  2101.  
  2102.  SEE ALSO
  2103.   evalfile, import
  2104.  
  2105. --------------------------------------------------------------
  2106.  
  2107. byte_compile_file
  2108.  
  2109.  SYNOPSIS
  2110.   Compile a file to byte-code for faster loading.
  2111.  
  2112.  USAGE
  2113.   byte_compile_file (String_Type file, Int_Type method)
  2114.  
  2115.  DESCRIPTION
  2116.   The `byte_compile_file' function byte-compiles `file'
  2117.   producing a new file with the same name except a `'c'' is added
  2118.   to the output file name.  For example, `file' is
  2119.   `"site.sl"', then this function produces a new file named
  2120.   `site.slc'.
  2121.  
  2122.  NOTES
  2123.   The `method' parameter is not used in the current
  2124.   implementation, but may be in the future.  For now, set
  2125.   it to `0'.
  2126.  
  2127.  SEE ALSO
  2128.   evalfile
  2129.  
  2130. --------------------------------------------------------------
  2131.  
  2132. eval
  2133.  
  2134.  SYNOPSIS
  2135.   Interpret a string as S-Lang code
  2136.  
  2137.  USAGE
  2138.   eval (String_Type expression [,String_Type namespace])
  2139.  
  2140.  DESCRIPTION
  2141.   The `eval' function parses a string as S-Lang code and executes the
  2142.   result.  If called with the optional namespace argument, then the
  2143.   string will be evaluated in the specified namespace.  If that
  2144.   namespace does not exist it will be created first.
  2145.  
  2146.   This is a useful function in many contexts including those where
  2147.   it is necessary to dynamically generate function definitions.
  2148.  
  2149.  EXAMPLE
  2150.  
  2151.     if (0 == is_defined ("my_function"))
  2152.       eval ("define my_function () { message (\"my_function\"); }");
  2153.  
  2154.  
  2155.  SEE ALSO
  2156.   is_defined, autoload, evalfile
  2157.  
  2158. --------------------------------------------------------------
  2159.  
  2160. evalfile
  2161.  
  2162.  SYNOPSIS
  2163.   Interpret a file containing S-Lang code
  2164.  
  2165.  USAGE
  2166.   Int_Type evalfile (String_Type file [,String_Type namespace])
  2167.  
  2168.  DESCRIPTION
  2169.   The `evalfile' function loads `file' into the interpreter
  2170.   and executes it.  If called with the optional namespace argument,
  2171.   the file will be loaded into the specified namespace, which will be
  2172.   created if necessary.  If given no namespace argument and the file
  2173.   has already been loaded, then it will be loaded again into an
  2174.   anonymous namespace.  A namespace argument given by the empty string
  2175.   will also cause the file to be loaded into a new anonymous namespace.
  2176.  
  2177.   If no errors were encountered, 1 will be returned; otherwise,
  2178.   a S-Lang exception will be thrown and the function will return zero.
  2179.  
  2180.  EXAMPLE
  2181.  
  2182.     define load_file (file)
  2183.     {
  2184.        try
  2185.        {
  2186.          () = evalfile (file);
  2187.        }
  2188.        catch AnyError;
  2189.     }
  2190.  
  2191.  
  2192.  NOTES
  2193.   For historical reasons, the return value of this function is not
  2194.   really useful.
  2195.  
  2196.   The file is searched along an application-defined load-path.  The
  2197.   `get_slang_load_path' and `set_slang_load_path' functions
  2198.   may be used to set and query the path.
  2199.  
  2200.  SEE ALSO
  2201.   eval, autoload, set_slang_load_path, get_slang_load_path
  2202.  
  2203. --------------------------------------------------------------
  2204.  
  2205. get_slang_load_path
  2206.  
  2207.  SYNOPSIS
  2208.   Get the value of the interpreter's load-path
  2209.  
  2210.  USAGE
  2211.   String_Type get_slang_load_path ()
  2212.  
  2213.  DESCRIPTION
  2214.   This function retrieves the value of the delimiter-separated search
  2215.   path used for loading files.  The delimiter is OS-specific and may
  2216.   be queried using the `path_get_delimiter' function.
  2217.  
  2218.  NOTES
  2219.   Some applications may not support the built-in load-path searching
  2220.   facility provided by the underlying library.
  2221.  
  2222.  SEE ALSO
  2223.   set_slang_load_path, path_get_delimiter
  2224.  
  2225. --------------------------------------------------------------
  2226.  
  2227. set_slang_load_path
  2228.  
  2229.  SYNOPSIS
  2230.   Set the value of the interpreter's load-path
  2231.  
  2232.  USAGE
  2233.   set_slang_load_path (String_Type path)
  2234.  
  2235.  DESCRIPTION
  2236.   This function may be used to set the value of the
  2237.   delimiter-separated search path used by the `evalfile' and
  2238.   `autoload' functions for locating files.  The delimiter is
  2239.   OS-specific and may be queried using the `path_get_delimiter'
  2240.   function.
  2241.  
  2242.  EXAMPLE
  2243.  
  2244.     public define prepend_to_slang_load_path (p)
  2245.     {
  2246.        variable s = stat_file (p);
  2247.        if (s == NULL) return;
  2248.        if (0 == stat_is ("dir", s.st_mode))
  2249.          return;
  2250.  
  2251.        p = sprintf ("%s%c%s", p, path_get_delimiter (), get_slang_load_path ());
  2252.        set_slang_load_path (p);
  2253.     }
  2254.  
  2255.  
  2256.  NOTES
  2257.   Some applications may not support the built-in load-path searching
  2258.   facility provided by the underlying library.
  2259.  
  2260.  SEE ALSO
  2261.   get_slang_load_path, path_get_delimiter, evalfile, autoload
  2262.  
  2263. --------------------------------------------------------------
  2264.  
  2265. get_import_module_path
  2266.  
  2267.  SYNOPSIS
  2268.   Get the search path for dynamically loadable objects
  2269.  
  2270.  USAGE
  2271.   String_Type get_import_module_path ()
  2272.  
  2273.  DESCRIPTION
  2274.   The `get_import_module_path' may be used to get the search path
  2275.   for dynamically shared objects.  Such objects may be made accessible
  2276.   to the application via the `import' function.
  2277.  
  2278.  SEE ALSO
  2279.   import, set_import_module_path
  2280.  
  2281. --------------------------------------------------------------
  2282.  
  2283. import
  2284.  
  2285.  SYNOPSIS
  2286.   Dynamically link to a specified module
  2287.  
  2288.  USAGE
  2289.   import (String_Type module [, String_Type namespace])
  2290.  
  2291.  DESCRIPTION
  2292.   The `import' function causes the run-time linker to dynamically
  2293.   link to the shared object specified by the `module' parameter.
  2294.   It searches for the shared object as follows: First a search is
  2295.   performed along all module paths specified by the application.  Then
  2296.   a search is made along the paths defined via the
  2297.   `set_import_module_path' function.  If not found, a search is
  2298.   performed along the paths given by the `SLANG_MODULE_PATH'
  2299.   environment variable.  Finally, a system dependent search is
  2300.   performed (e.g., using the `LD_LIBRARY_PATH' environment
  2301.   variable).
  2302.  
  2303.   The optional second parameter may be used to specify a namespace
  2304.   for the intrinsic functions and variables of the module.  If this
  2305.   parameter is not present, the intrinsic objects will be placed into
  2306.   the active namespace, or global namespace if the active namespace is
  2307.   anonymous.
  2308.  
  2309.   This function throws an `ImportError' if the specified module is
  2310.   not found.
  2311.  
  2312.  NOTES
  2313.   The `import' function is not available on all systems.
  2314.  
  2315.  SEE ALSO
  2316.   set_import_module_path, use_namespace, current_namespace, getenv, evalfile
  2317.  
  2318. --------------------------------------------------------------
  2319.  
  2320. set_import_module_path
  2321.  
  2322.  SYNOPSIS
  2323.   Set the search path for dynamically loadable objects
  2324.  
  2325.  USAGE
  2326.   set_import_module_path (String_Type path_list)
  2327.  
  2328.  DESCRIPTION
  2329.   The `set_import_module_path' may be used to set the search path
  2330.   for dynamically shared objects.  Such objects may be made accessible
  2331.   to the application via the `import' function.
  2332.  
  2333.   The actual syntax for the specification of the set of paths will
  2334.   vary according to the operating system.  Under Unix, a colon
  2335.   character is used to separate paths in `path_list'.  For win32
  2336.   systems a semi-colon is used.  The `path_get_delimiter'
  2337.   function may be used to get the value of the delimiter.
  2338.  
  2339.  SEE ALSO
  2340.   import, get_import_module_path, path_get_delimiter
  2341.  
  2342. --------------------------------------------------------------
  2343.  
  2344. add_doc_file
  2345.  
  2346.  SYNOPSIS
  2347.   Make a documentation file known to the help system
  2348.  
  2349.  USAGE
  2350.   add_doc_file (String_Type file)
  2351.  
  2352.  DESCRIPTION
  2353.   The `add_doc_file' is used to add a documentation file to the
  2354.   system.  Such files are searched by the
  2355.   `get_doc_string_from_file' function.  The `file' must be
  2356.   specified using the full path.
  2357.  
  2358.  SEE ALSO
  2359.   set_doc_files, get_doc_files, get_doc_string_from_file
  2360.  
  2361. --------------------------------------------------------------
  2362.  
  2363. _apropos
  2364.  
  2365.  SYNOPSIS
  2366.   Generate a list of functions and variables
  2367.  
  2368.  USAGE
  2369.   Array_Type _apropos (String_Type ns, String_Type s, Integer_Type flags)
  2370.  
  2371.  DESCRIPTION
  2372.   The `_apropos' function may be used to get a list of all defined
  2373.   objects in the namespace `ns' whose name matches the regular
  2374.   expression `s' and whose type matches those specified by
  2375.   `flags'.  It returns an array of strings containing the names
  2376.   matched.
  2377.  
  2378.   The second parameter `flags' is a bit mapped value whose bits
  2379.   are defined according to the following table
  2380.  
  2381.      1          Intrinsic Function
  2382.      2          User-defined Function
  2383.      4          Intrinsic Variable
  2384.      8          User-defined Variable
  2385.  
  2386.  
  2387.  EXAMPLE
  2388.  
  2389.     define apropos (s)
  2390.     {
  2391.       variable n, name, a;
  2392.       a = _apropos ("Global", s, 0xF);
  2393.  
  2394.       vmessage ("Found %d matches:", length (a));
  2395.       foreach name (a)
  2396.         message (name);
  2397.     }
  2398.  
  2399.   prints a list of all matches.
  2400.  
  2401.  NOTES
  2402.   If the namespace specifier `ns' is the empty string `""',
  2403.   then the namespace will default to the static namespace of the
  2404.   current compilation unit.
  2405.  
  2406.  SEE ALSO
  2407.   is_defined, sprintf, _get_namespaces
  2408.  
  2409. --------------------------------------------------------------
  2410.  
  2411. _function_name
  2412.  
  2413.  SYNOPSIS
  2414.   Returns the name of the currently executing function
  2415.  
  2416.  USAGE
  2417.   String_Type _function_name ()
  2418.  
  2419.  DESCRIPTION
  2420.   This function returns the name of the currently executing function.
  2421.   If called from top-level, it returns the empty string.
  2422.  
  2423.  SEE ALSO
  2424.   _trace_function, is_defined
  2425.  
  2426. --------------------------------------------------------------
  2427.  
  2428. __get_defined_symbols
  2429.  
  2430.  SYNOPSIS
  2431.   Get the symbols defined by the preprocessor
  2432.  
  2433.  USAGE
  2434.   Int_Type __get_defined_symbols ()
  2435.  
  2436.  DESCRIPTION
  2437.   The `__get_defined_symbols' functions is used to get the list of
  2438.   all the symbols defined by the S-Lang preprocessor.  It pushes each
  2439.   of the symbols on the stack followed by the number of items pushed.
  2440.  
  2441.  SEE ALSO
  2442.   is_defined, _apropos, _get_namespaces
  2443.  
  2444. --------------------------------------------------------------
  2445.  
  2446. get_doc_files
  2447.  
  2448.  SYNOPSIS
  2449.   Get the list of documentation files
  2450.  
  2451.  USAGE
  2452.   String_Type[] = get_doc_files ()
  2453.  
  2454.  DESCRIPTION
  2455.   The `get_doc_files' function returns the internal list of
  2456.   documentation files as an array of strings.
  2457.  
  2458.  SEE ALSO
  2459.   set_doc_files, add_doc_file, get_doc_string_from_file
  2460.  
  2461. --------------------------------------------------------------
  2462.  
  2463. get_doc_string_from_file
  2464.  
  2465.  SYNOPSIS
  2466.   Read documentation from a file
  2467.  
  2468.  USAGE
  2469.   String_Type get_doc_string_from_file ([String_Type f,] String_Type t)
  2470.  
  2471.  DESCRIPTION
  2472.   If called with two arguments, `get_doc_string_from_file' opens
  2473.   the documentation file `f' and searches it for topic `t'.
  2474.   Otherwise, it will search an internal list of documentation files
  2475.   looking for the documentation associated with the topic `t'.  If
  2476.   found, the documentation for `t' will be returned, otherwise the
  2477.   function will return NULL.
  2478.  
  2479.   Files may be added to the internal list via the `add_doc_file'
  2480.   or `set_doc_files' functions.
  2481.  
  2482.  SEE ALSO
  2483.   add_doc_file, set_doc_files, get_doc_files, _slang_doc_dir
  2484.  
  2485. --------------------------------------------------------------
  2486.  
  2487. _get_namespaces
  2488.  
  2489.  SYNOPSIS
  2490.   Returns a list of namespace names
  2491.  
  2492.  USAGE
  2493.   String_Type[] _get_namespaces ()
  2494.  
  2495.  DESCRIPTION
  2496.   This function returns a string array containing the names of the
  2497.   currently defined namespaces.
  2498.  
  2499.  SEE ALSO
  2500.   _apropos, use_namespace, implements, __get_defined_symbols
  2501.  
  2502. --------------------------------------------------------------
  2503.  
  2504. is_defined
  2505.  
  2506.  SYNOPSIS
  2507.   Determine if a variable or function is defined
  2508.  
  2509.  USAGE
  2510.   Integer_Type is_defined (String_Type name)
  2511.  
  2512.  DESCRIPTION
  2513.    This function is used to determine whether or not a function or
  2514.    variable of the given name has been defined.  If the specified name
  2515.    has not been defined, the function returns 0.  Otherwise, it
  2516.    returns a non-zero value that depends on the type of object
  2517.    attached to the name. Specifically, it returns one of the following
  2518.    values:
  2519.  
  2520.      +1     intrinsic function
  2521.      +2     slang function
  2522.      -1     intrinsic variable
  2523.      -2     slang variable
  2524.       0     undefined
  2525.  
  2526.  
  2527.  EXAMPLE
  2528.     Consider the function:
  2529.  
  2530.     define runhooks (hook)
  2531.     {
  2532.        if (2 == is_defined(hook)) eval(hook);
  2533.     }
  2534.  
  2535.     This function could be called from another S-Lang function to
  2536.     allow customization of that function, e.g., if the function
  2537.     represents a mode, the hook could be called to setup keybindings
  2538.     for the mode.
  2539.  
  2540.  SEE ALSO
  2541.   typeof, eval, autoload, __get_reference, __is_initialized
  2542.  
  2543. --------------------------------------------------------------
  2544.  
  2545. __is_initialized
  2546.  
  2547.  SYNOPSIS
  2548.   Determine whether or not a variable has a value
  2549.  
  2550.  USAGE
  2551.   Integer_Type __is_initialized (Ref_Type r)
  2552.  
  2553.  DESCRIPTION
  2554.    This function returns non-zero of the object referenced by `r'
  2555.    is initialized, i.e., whether it has a value.  It returns 0 if the
  2556.    referenced object has not been initialized.
  2557.  
  2558.  EXAMPLE
  2559.    The function:
  2560.  
  2561.     define zero ()
  2562.     {
  2563.        variable f;
  2564.        return __is_initialized (&f);
  2565.     }
  2566.  
  2567.   will always return zero, but
  2568.  
  2569.     define one ()
  2570.     {
  2571.        variable f = 0;
  2572.        return __is_initialized (&f);
  2573.     }
  2574.  
  2575.   will return one.
  2576.  
  2577.  SEE ALSO
  2578.   __get_reference, __uninitialize, is_defined, typeof, eval
  2579.  
  2580. --------------------------------------------------------------
  2581.  
  2582. _NARGS
  2583.  
  2584.  SYNOPSIS
  2585.   The number of parameters passed to a function
  2586.  
  2587.  USAGE
  2588.   Integer_Type _NARGS
  2589.    The value of the `_NARGS' variable represents the number of
  2590.    arguments passed to the function.  This variable is local to each
  2591.    function.
  2592.  
  2593.  EXAMPLE
  2594.    This example uses the `_NARGS' variable to print the list of
  2595.    values passed to the function:
  2596.  
  2597.      define print_values ()
  2598.      {
  2599.         variable arg;
  2600.  
  2601.         if (_NARGS == 0)
  2602.           {
  2603.              message ("Nothing to print");
  2604.              return;
  2605.           }
  2606.         foreach arg (__pop_args (_NARGS))
  2607.           vmessage ("Argument value is: %S", arg.value);
  2608.      }
  2609.  
  2610.  
  2611.  SEE ALSO
  2612.   __pop_args, __push_args, typeof
  2613.  
  2614. --------------------------------------------------------------
  2615.  
  2616. set_doc_files
  2617.  
  2618.  SYNOPSIS
  2619.   Set the internal list of documentation files
  2620.  
  2621.  USAGE
  2622.   set_doc_files (String_Type[] list)
  2623.  
  2624.  DESCRIPTION
  2625.   The `set_doc_files' function may be used to set the internal
  2626.   list of documentation files.  It takes a single parameter, which is
  2627.   required to be an array of strings.  The internal file list is set
  2628.   to the files specified by the elements of the array.
  2629.  
  2630.  EXAMPLE
  2631.   The following example shows how to add all the files in a specified
  2632.   directory to the internal list.  It makes use of the `glob'
  2633.   function that is distributed as part of `slsh'.
  2634.  
  2635.      files = glob ("/path/to/doc/files/*.sld");
  2636.      set_doc_files ([files, get_doc_files ()]);
  2637.  
  2638.  
  2639.  SEE ALSO
  2640.   get_doc_files, add_doc_file, get_doc_string_from_file
  2641.  
  2642. --------------------------------------------------------------
  2643.  
  2644. _slang_doc_dir
  2645.  
  2646.  SYNOPSIS
  2647.   Installed documentation directory
  2648.  
  2649.  USAGE
  2650.   String_Type _slang_doc_dir
  2651.  
  2652.  DESCRIPTION
  2653.    The `_slang_doc_dir' variable is a read-only variable that
  2654.    specifies the compile-time installation location of the S-Lang
  2655.    documentation.
  2656.  
  2657.  SEE ALSO
  2658.   get_doc_string_from_file
  2659.  
  2660. --------------------------------------------------------------
  2661.  
  2662. _slang_version
  2663.  
  2664.  SYNOPSIS
  2665.   The S-Lang library version number
  2666.  
  2667.  USAGE
  2668.   Integer_Type _slang_version
  2669.  
  2670.  DESCRIPTION
  2671.    `_slang_version' is a read-only variable that gives the version
  2672.    number of the S-Lang library.
  2673.  
  2674.  SEE ALSO
  2675.   _slang_version_string
  2676.  
  2677. --------------------------------------------------------------
  2678.  
  2679. _slang_version_string
  2680.  
  2681.  SYNOPSIS
  2682.   The S-Lang library version number as a string
  2683.  
  2684.  USAGE
  2685.   String_Type _slang_version_string
  2686.  
  2687.  DESCRIPTION
  2688.   `_slang_version_string' is a read-only variable that gives a
  2689.   string representation of the version number of the S-Lang library.
  2690.  
  2691.  SEE ALSO
  2692.   _slang_version
  2693.  
  2694. --------------------------------------------------------------
  2695.  
  2696. list_append
  2697.  
  2698.  SYNOPSIS
  2699.   Append an object to a list
  2700.  
  2701.  USAGE
  2702.   list_append (List_Type list, object [,Int_Type nth])
  2703.  
  2704.  DESCRIPTION
  2705.   The `list_append' function is like `list_insert' except
  2706.   this function appends the object to the the list.  The optional
  2707.   argument `nth' may be used to specify where the object is to be
  2708.   appended.  See the documentation on `list_insert' for more details.
  2709.  
  2710.  SEE ALSO
  2711.   list_insert, list_delete, list_pop, list_new, list_reverse
  2712.  
  2713. --------------------------------------------------------------
  2714.  
  2715. list_delete
  2716.  
  2717.  SYNOPSIS
  2718.   Remove an item from a list
  2719.  
  2720.  USAGE
  2721.   list_delete (List_Type list, Int_Type nth)
  2722.  
  2723.  DESCRIPTION
  2724.   This function removes the `nth' item in the specified list.
  2725.   The first item in the list corresponds to a value of `nth'
  2726.   equal to zero.  If `nth' is negative, then the indexing is with
  2727.   respect to the end of the list with the last item corresponding to
  2728.   `nth' equal to -1.
  2729.  
  2730.  SEE ALSO
  2731.   list_insert, list_append, list_pop, list_new, list_reverse
  2732.  
  2733. --------------------------------------------------------------
  2734.  
  2735. list_insert
  2736.  
  2737.  SYNOPSIS
  2738.   Insert an item into a list
  2739.  
  2740.  USAGE
  2741.   list_insert (List_Type list, object [,Int_Type nth])
  2742.  
  2743.  DESCRIPTION
  2744.   This function may be used to insert an object into the specified
  2745.   list.  With just two arguments, the object will be inserted at the
  2746.   beginning of the list.  The optional third argument, `nth', may
  2747.   be used to specify the insertion point.  The first item in the list
  2748.   corresponds to a value of `nth' equal to zero.  If `nth'
  2749.   is negative, then the indexing is with respect to the end of the
  2750.   list with the last item given by a value of `nth' equal to -1.
  2751.  
  2752.  NOTES
  2753.   It is important to note that
  2754.  
  2755.     list_insert (list, object, 0);
  2756.  
  2757.   is not the same as
  2758.  
  2759.     list = {object, list}
  2760.  
  2761.   since the latter creates a new list with two items, `object'
  2762.   and the old list.
  2763.  
  2764.  SEE ALSO
  2765.   list_append, list_pop, list_delete, list_new, list_reverse
  2766.  
  2767. --------------------------------------------------------------
  2768.  
  2769. list_new
  2770.  
  2771.  SYNOPSIS
  2772.   Create a new list
  2773.  
  2774.  USAGE
  2775.   List_Type list_new ()
  2776.  
  2777.  DESCRIPTION
  2778.   This function creates a new empty List_Type object.  Such a
  2779.   list may also be created using the syntax
  2780.  
  2781.      list = {};
  2782.  
  2783.  
  2784.  SEE ALSO
  2785.   list_delete, list_insert, list_append, list_reverse, list_pop
  2786.  
  2787. --------------------------------------------------------------
  2788.  
  2789. list_pop
  2790.  
  2791.  SYNOPSIS
  2792.   Extract an item from a list
  2793.  
  2794.  USAGE
  2795.   object = list_pop (List_Type list [, Int_Type nth])
  2796.  
  2797.  DESCRIPTION
  2798.   The `list_pop' function returns a object from a list deleting
  2799.   the item from the list in the process.  If the second argument is
  2800.   present, then it may be used to specify the position in the list
  2801.   where the item is to be obtained.  If called with a single argument,
  2802.   the first item in the list will be used.
  2803.  
  2804.  SEE ALSO
  2805.   list_delete, list_insert, list_append, list_reverse, list_new
  2806.  
  2807. --------------------------------------------------------------
  2808.  
  2809. list_reverse
  2810.  
  2811.  SYNOPSIS
  2812.   Reverse a list
  2813.  
  2814.  USAGE
  2815.   list_reverse (List_Type list)
  2816.  
  2817.  DESCRIPTION
  2818.   This function may be used to reverse the items in list.
  2819.  
  2820.  NOTES
  2821.   This function does not create a new list.  The list passed to the
  2822.   function will be reversed upon return from the function.  If it is
  2823.   desired to create a separate reversed list, then a separate copy
  2824.   should be made, e.g.,
  2825.  
  2826.      rev_list = @list;
  2827.      list_reverse (rev_list);
  2828.  
  2829.  
  2830.  SEE ALSO
  2831.   list_new, list_insert, list_append, list_delete, list_pop
  2832.  
  2833. --------------------------------------------------------------
  2834.  
  2835. abs
  2836.  
  2837.  SYNOPSIS
  2838.   Compute the absolute value of a number
  2839.  
  2840.  USAGE
  2841.   y = abs(x)
  2842.  
  2843.  DESCRIPTION
  2844.   The `abs' function returns the absolute value of an arithmetic
  2845.   type.  If its argument is a complex number (Complex_Type),
  2846.   then it returns the modulus.  If the argument is an array, a new
  2847.   array will be created whose elements are obtained from the original
  2848.   array by using the `abs' function.
  2849.  
  2850.  SEE ALSO
  2851.   sign, sqr
  2852.  
  2853. --------------------------------------------------------------
  2854.  
  2855. acos
  2856.  
  2857.  SYNOPSIS
  2858.   Compute the arc-cosine of a number
  2859.  
  2860.  USAGE
  2861.   y = acos (x)
  2862.  
  2863.  DESCRIPTION
  2864.   The `acos' function computes the arc-cosine of a number and
  2865.   returns the result.  If its argument is an array, the
  2866.   `acos' function will be applied to each element and the result returned
  2867.   as an array.
  2868.  
  2869.  SEE ALSO
  2870.   cos, atan, acosh, cosh
  2871.  
  2872. --------------------------------------------------------------
  2873.  
  2874. acosh
  2875.  
  2876.  SYNOPSIS
  2877.   Compute the inverse cosh of a number
  2878.  
  2879.  USAGE
  2880.   y = acosh (x)
  2881.  
  2882.  DESCRIPTION
  2883.   The `acosh' function computes the inverse hyperbolic cosine of a number and
  2884.   returns the result.  If its argument is an array, the
  2885.   `acosh' function will be applied to each element and the result returned
  2886.   as an array.
  2887.  
  2888.  SEE ALSO
  2889.   cos, atan, acosh, cosh
  2890.  
  2891. --------------------------------------------------------------
  2892.  
  2893. asin
  2894.  
  2895.  SYNOPSIS
  2896.   Compute the arc-sine of a number
  2897.  
  2898.  USAGE
  2899.   y = asin (x)
  2900.  
  2901.  DESCRIPTION
  2902.   The `asin' function computes the arc-sine of a number and
  2903.   returns the result.  If its argument is an array, the
  2904.   `asin' function will be applied to each element and the result returned
  2905.   as an array.
  2906.  
  2907.  SEE ALSO
  2908.   cos, atan, acosh, cosh
  2909.  
  2910. --------------------------------------------------------------
  2911.  
  2912. asinh
  2913.  
  2914.  SYNOPSIS
  2915.   Compute the inverse-sinh of a number
  2916.  
  2917.  USAGE
  2918.   y = asinh (x)
  2919.  
  2920.  DESCRIPTION
  2921.   The `asinh' function computes the inverse hyperbolic sine of a number and
  2922.   returns the result.  If its argument is an array, the
  2923.   `asinh' function will be applied to each element and the result returned
  2924.   as an array.
  2925.  
  2926.  SEE ALSO
  2927.   cos, atan, acosh, cosh
  2928.  
  2929. --------------------------------------------------------------
  2930.  
  2931. atan
  2932.  
  2933.  SYNOPSIS
  2934.   Compute the arc-tangent of a number
  2935.  
  2936.  USAGE
  2937.   y = atan (x)
  2938.  
  2939.  DESCRIPTION
  2940.   The `atan' function computes the arc-tangent of a number and
  2941.   returns the result.  If its argument is an array, the
  2942.   `atan' function will be applied to each element and the result returned
  2943.   as an array.
  2944.  
  2945.  SEE ALSO
  2946.   atan2, cos, acosh, cosh
  2947.  
  2948. --------------------------------------------------------------
  2949.  
  2950. atan2
  2951.  
  2952.  SYNOPSIS
  2953.   Compute the arc-tangent of the ratio of two variables
  2954.  
  2955.  USAGE
  2956.   z = atan2 (y, x)
  2957.  
  2958.  DESCRIPTION
  2959.   The `atan2' function computes the arc-tangent of the ratio
  2960.   `y/x' and returns the result as a value that has the
  2961.   proper sign for the quadrant where the point (x,y) is located.  The
  2962.   returned value `z' will satisfy (-PI < z <= PI).  If either of the
  2963.   arguments is an array, an array of the corresponding values will be returned.
  2964.  
  2965.  SEE ALSO
  2966.   hypot, cos, atan, acosh, cosh
  2967.  
  2968. --------------------------------------------------------------
  2969.  
  2970. atanh
  2971.  
  2972.  SYNOPSIS
  2973.   Compute the inverse-tanh of a number
  2974.  
  2975.  USAGE
  2976.   y = atanh (x)
  2977.  
  2978.  DESCRIPTION
  2979.   The `atanh' function computes the inverse hyperbolic tangent of a number and
  2980.   returns the result.  If its argument is an array, the
  2981.   `atanh' function will be applied to each element and the result returned
  2982.   as an array.
  2983.  
  2984.  SEE ALSO
  2985.   cos, atan, acosh, cosh
  2986.  
  2987. --------------------------------------------------------------
  2988.  
  2989. ceil
  2990.  
  2991.  SYNOPSIS
  2992.   Round x up to the nearest integral value
  2993.  
  2994.  USAGE
  2995.   y = ceil (x)
  2996.  
  2997.  DESCRIPTION
  2998.   This function rounds its numeric argument up to the nearest integral
  2999.   value. If the argument is an array, the corresponding array will be
  3000.   returned.
  3001.  
  3002.  SEE ALSO
  3003.   floor, round
  3004.  
  3005. --------------------------------------------------------------
  3006.  
  3007. Conj
  3008.  
  3009.  SYNOPSIS
  3010.   Compute the complex conjugate of a number
  3011.  
  3012.  USAGE
  3013.   z1 = Conj (z)
  3014.  
  3015.  DESCRIPTION
  3016.   The `Conj' function returns the complex conjugate of a number.
  3017.   If its argument is an array, the `Conj' function will be applied to each
  3018.   element and the result returned as an array.
  3019.  
  3020.  SEE ALSO
  3021.   Real, Imag, abs
  3022.  
  3023. --------------------------------------------------------------
  3024.  
  3025. cos
  3026.  
  3027.  SYNOPSIS
  3028.   Compute the cosine of a number
  3029.  
  3030.  USAGE
  3031.   y = cos (x)
  3032.  
  3033.  DESCRIPTION
  3034.   The `cos' function computes the cosine of a number and
  3035.   returns the result.  If its argument is an array, the
  3036.   `cos' function will be applied to each element and the result returned
  3037.   as an array.
  3038.  
  3039.  SEE ALSO
  3040.   cos, atan, acosh, cosh
  3041.  
  3042. --------------------------------------------------------------
  3043.  
  3044. cosh
  3045.  
  3046.  SYNOPSIS
  3047.   Compute the hyperbolic cosine of a number
  3048.  
  3049.  USAGE
  3050.   y = cosh (x)
  3051.  
  3052.  DESCRIPTION
  3053.   The `cosh' function computes the hyperbolic cosine of a number and
  3054.   returns the result.  If its argument is an array, the
  3055.   `cosh' function will be applied to each element and the result returned
  3056.   as an array.
  3057.  
  3058.  SEE ALSO
  3059.   cos, atan, acosh, cosh
  3060.  
  3061. --------------------------------------------------------------
  3062.  
  3063. _diff
  3064.  
  3065.  SYNOPSIS
  3066.   Compute the absolute difference of two values
  3067.  
  3068.  USAGE
  3069.   y = _diff (x, y)
  3070.  
  3071.  DESCRIPTION
  3072.   The `_diff' function returns a floating point number equal to
  3073.   the absolute value of the difference of its two arguments.
  3074.   If either argument is an array, an array of the corresponding values
  3075.   will be returned.
  3076.  
  3077.  SEE ALSO
  3078.   abs
  3079.  
  3080. --------------------------------------------------------------
  3081.  
  3082. exp
  3083.  
  3084.  SYNOPSIS
  3085.   Compute the exponential of a number
  3086.  
  3087.  USAGE
  3088.   y = exp (x)
  3089.  
  3090.  DESCRIPTION
  3091.   The `exp' function computes the exponential of a number and
  3092.   returns the result.  If its argument is an array, the
  3093.   `exp' function will be applied to each element and the result returned
  3094.   as an array.
  3095.  
  3096.  SEE ALSO
  3097.   cos, atan, acosh, cosh
  3098.  
  3099. --------------------------------------------------------------
  3100.  
  3101. feqs
  3102.  
  3103.  SYNOPSIS
  3104.   Test the approximate equality of two numbers
  3105.  
  3106.  USAGE
  3107.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3108.  
  3109.  DESCRIPTION
  3110.  This function compares two floating point numbers `a' and
  3111.  `b', and returns a non-zero value if they are equal to within a
  3112.  specified tolerance; otherwise 0 will be returned.  If either is an
  3113.  array, a corresponding boolean array will be returned.
  3114.  
  3115.  The tolerances are specified as relative and absolute differences via
  3116.  the optional third and fourth arguments.  If no optional arguments
  3117.  are present, the tolerances default to `reldiff=0.01' and
  3118.  `absdiff=1e-6'.  If only the relative difference has been
  3119.  specified, the absolute difference (`absdiff') will be taken to
  3120.  be 0.0.
  3121.  
  3122.  For the case when `|b|>=|a|', `a' and `b' are
  3123.  considered to be equal to within the specified tolerances if either
  3124.  `|b-a|<=absdiff' or `|b-a|/|b|<=reldiff' is true.
  3125.  
  3126.  SEE ALSO
  3127.   fneqs, fgteqs, flteqs
  3128.  
  3129. --------------------------------------------------------------
  3130.  
  3131. fgteqs
  3132.  
  3133.  SYNOPSIS
  3134.   Compare two numbers using specified tolerances
  3135. .
  3136.  
  3137.  USAGE
  3138.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3139.  
  3140.  DESCRIPTION
  3141.   This function is functionally equivalent to:
  3142.  
  3143.      (a >= b) or feqs(a,b,...)
  3144.  
  3145.   See the documentation of `feqs' for more information.
  3146.  
  3147.  SEE ALSO
  3148.   feqs, fneqs, flteqs
  3149.  
  3150. --------------------------------------------------------------
  3151.  
  3152. floor
  3153.  
  3154.  SYNOPSIS
  3155.   Round x down to the nearest integer
  3156.  
  3157.  USAGE
  3158.   y = floor (x)
  3159.  
  3160.  DESCRIPTION
  3161.   This function rounds its numeric argument down to the nearest
  3162.   integral value. If the argument is an array, the corresponding array
  3163.   will be returned.
  3164.  
  3165.  SEE ALSO
  3166.   ceil, round, nint
  3167.  
  3168. --------------------------------------------------------------
  3169.  
  3170. flteqs
  3171.  
  3172.  SYNOPSIS
  3173.   Compare two numbers using specified tolerances
  3174. .
  3175.  
  3176.  USAGE
  3177.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3178.  
  3179.  DESCRIPTION
  3180.   This function is functionally equivalent to:
  3181.  
  3182.      (a <= b) or feqs(a,b,...)
  3183.  
  3184.   See the documentation of `feqs' for more information.
  3185.  
  3186.  SEE ALSO
  3187.   feqs, fneqs, fgteqs
  3188.  
  3189. --------------------------------------------------------------
  3190.  
  3191. fneqs
  3192.  
  3193.  SYNOPSIS
  3194.   Test the approximate inequality of two numbers
  3195.  
  3196.  USAGE
  3197.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3198.  
  3199.  DESCRIPTION
  3200.   This function is functionally equivalent to:
  3201.  
  3202.     not fneqs(a,b,...)
  3203.  
  3204.   See the documentation of `feqs' for more information.
  3205.  
  3206.  SEE ALSO
  3207.   feqs, fgteqs, flteqs
  3208.  
  3209. --------------------------------------------------------------
  3210.  
  3211. hypot
  3212.  
  3213.  SYNOPSIS
  3214.   Compute sqrt(x^2+y^2)
  3215.  
  3216.  USAGE
  3217.   r = hypot (x, y)
  3218.  
  3219.  DESCRIPTION
  3220.   The `hypot' function computes the quantity `sqrt(x^2+y^2)'
  3221.   except that it employs an algorithm that tries to avoid arithmetic
  3222.   overflow when `x' or `y' are large.  If either argument is
  3223.   an array, an array of the corresponding values will be returned.
  3224.  
  3225.  SEE ALSO
  3226.   atan2, cos, atan, acosh, cosh
  3227.  
  3228. --------------------------------------------------------------
  3229.  
  3230. Imag
  3231.  
  3232.  SYNOPSIS
  3233.   Compute the imaginary part of a number
  3234.  
  3235.  USAGE
  3236.   i = Imag (z)
  3237.  
  3238.  DESCRIPTION
  3239.   The `Imag' function returns the imaginary part of a number.
  3240.   If its argument is an array, the `Imag' function will be applied to each
  3241.   element and the result returned as an array.
  3242.  
  3243.  SEE ALSO
  3244.   Real, Conj, abs
  3245.  
  3246. --------------------------------------------------------------
  3247.  
  3248. isinf
  3249.  
  3250.  SYNOPSIS
  3251.   Test for infinity
  3252.  
  3253.  USAGE
  3254.   y = isinf (x)
  3255.  
  3256.  DESCRIPTION
  3257.   This function returns 1 if x corresponds to an IEEE infinity, or 0
  3258.   otherwise. If the argument is an array, an array of the
  3259.   corresponding values will be returned.
  3260.  
  3261.  SEE ALSO
  3262.   isnan, _Inf
  3263.  
  3264. --------------------------------------------------------------
  3265.  
  3266. isnan
  3267.  
  3268.  SYNOPSIS
  3269.   isnan
  3270.  
  3271.  USAGE
  3272.   y = isnan (x)
  3273.  
  3274.  DESCRIPTION
  3275.   This function returns 1 if x corresponds to an IEEE NaN (Not a Number),
  3276.   or 0 otherwise.  If the argument is an array, an array of
  3277.   the corresponding values will be returned.
  3278.  
  3279.  SEE ALSO
  3280.   isinf, _NaN
  3281.  
  3282. --------------------------------------------------------------
  3283.  
  3284. log
  3285.  
  3286.  SYNOPSIS
  3287.   Compute the logarithm of a number
  3288.  
  3289.  USAGE
  3290.   y = log (x)
  3291.  
  3292.  DESCRIPTION
  3293.   The `log' function computes the natural logarithm of a number and
  3294.   returns the result.  If its argument is an array, the
  3295.   `log' function will be applied to each element and the result returned
  3296.   as an array.
  3297.  
  3298.  SEE ALSO
  3299.   cos, atan, acosh, cosh
  3300.  
  3301. --------------------------------------------------------------
  3302.  
  3303. log10
  3304.  
  3305.  SYNOPSIS
  3306.   Compute the base-10 logarithm of a number
  3307.  
  3308.  USAGE
  3309.   y = log10 (x)
  3310.  
  3311.  DESCRIPTION
  3312.   The `log10' function computes the base-10 logarithm of a number and
  3313.   returns the result.  If its argument is an array, the
  3314.   `log10' function will be applied to each element and the result returned
  3315.   as an array.
  3316.  
  3317.  SEE ALSO
  3318.   cos, atan, acosh, cosh
  3319.  
  3320. --------------------------------------------------------------
  3321.  
  3322. _max
  3323.  
  3324.  SYNOPSIS
  3325.   Compute the maximum of two values
  3326.  
  3327.  USAGE
  3328.   z = _max (x,y)
  3329.  
  3330.  DESCRIPTION
  3331.   The `_max' function returns a floating point number equal to the
  3332.   maximum value of its two arguments.
  3333.   If either argument is an array, an array of the corresponding values
  3334.   will be returned.
  3335.  
  3336.  NOTES
  3337.   This function returns a floating point result even when both
  3338.   arguments are integers.
  3339.  
  3340.  SEE ALSO
  3341.   max, _min, min
  3342.  
  3343. --------------------------------------------------------------
  3344.  
  3345. _min
  3346.  
  3347.  SYNOPSIS
  3348.   Compute the minimum of two values
  3349.  
  3350.  USAGE
  3351.   z = _min (x,y)
  3352.  
  3353.  DESCRIPTION
  3354.   The `_min' function returns a floating point number equal to the
  3355.   minimum value of its two arguments.
  3356.   If either argument is an array, an array of the corresponding values
  3357.   will be returned.
  3358.  
  3359.  NOTES
  3360.   This function returns a floating point result even when both
  3361.   arguments are integers.
  3362.  
  3363.  SEE ALSO
  3364.   min, _max, max
  3365.  
  3366. --------------------------------------------------------------
  3367.  
  3368. mul2
  3369.  
  3370.  SYNOPSIS
  3371.   Multiply a number by 2
  3372.  
  3373.  USAGE
  3374.   y = mul2(x)
  3375.  
  3376.  DESCRIPTION
  3377.   The `mul2' function multiplies an arithmetic type by two and
  3378.   returns the result.  If its argument is an array, a new array will
  3379.   be created whose elements are obtained from the original array by
  3380.   using the `mul2' function.
  3381.  
  3382.  SEE ALSO
  3383.   sqr, abs
  3384.  
  3385. --------------------------------------------------------------
  3386.  
  3387. nint
  3388.  
  3389.  SYNOPSIS
  3390.   Round to the nearest integer
  3391.  
  3392.  USAGE
  3393.   i = nint(x)
  3394.  
  3395.  DESCRIPTION
  3396.   The `nint' rounds its argument to the nearest integer and
  3397.   returns the result.  If its argument is an array, a new array will
  3398.   be created whose elements are obtained from the original array
  3399.   elements by using the `nint' function.
  3400.  
  3401.  SEE ALSO
  3402.   round, floor, ceil
  3403.  
  3404. --------------------------------------------------------------
  3405.  
  3406. polynom
  3407.  
  3408.  SYNOPSIS
  3409.   Evaluate a polynomial
  3410.  
  3411.  USAGE
  3412.   Double_Type polynom(Double_Type a, b, ...c, Integer_Type n, Double_Type x)
  3413.  
  3414.  DESCRIPTION
  3415.   The `polynom' function returns the value of the polynomial expression:
  3416.  
  3417.      ax^n + bx^(n - 1) + ... c
  3418.  
  3419.  
  3420.  NOTES
  3421.   The `polynom' function should be extended to work with complex
  3422.   and array data types.  The current implementation is limited to
  3423.   Double_Type quantities.
  3424.  
  3425.  SEE ALSO
  3426.   exp
  3427.  
  3428. --------------------------------------------------------------
  3429.  
  3430. Real
  3431.  
  3432.  SYNOPSIS
  3433.   Compute the real part of a number
  3434.  
  3435.  USAGE
  3436.   r = Real (z)
  3437.  
  3438.  DESCRIPTION
  3439.   The `Real' function returns the real part of a number. If its
  3440.   argument is an array, the `Real' function will be applied to
  3441.   each element and the result returned as an array.
  3442.  
  3443.  SEE ALSO
  3444.   Imag, Conj, abs
  3445.  
  3446. --------------------------------------------------------------
  3447.  
  3448. round
  3449.  
  3450.  SYNOPSIS
  3451.   Round to the nearest integral value
  3452.  
  3453.  USAGE
  3454.   y = round (x)
  3455.  
  3456.  DESCRIPTION
  3457.   This function rounds its argument to the nearest integral value and
  3458.   returns it as a floating point result. If the argument is an array,
  3459.   an array of the corresponding values will be returned.
  3460.  
  3461.  SEE ALSO
  3462.   floor, ceil, nint
  3463.  
  3464. --------------------------------------------------------------
  3465.  
  3466. set_float_format
  3467.  
  3468.  SYNOPSIS
  3469.   Set the format for printing floating point values.
  3470.  
  3471.  USAGE
  3472.   set_float_format (String_Type fmt)
  3473.  
  3474.  DESCRIPTION
  3475.   The `set_float_format' function is used to set the floating
  3476.   point format to be used when floating point numbers are printed.
  3477.   The routines that use this are the traceback routines and the
  3478.   `string' function, any anything based upon the `string'
  3479.   function. The default value is `"%g"'
  3480.  
  3481.  EXAMPLE
  3482.  
  3483.      s = string (PI);                %  --> s = "3.14159"
  3484.      set_float_format ("%16.10f");
  3485.      s = string (PI);                %  --> s = "3.1415926536"
  3486.      set_float_format ("%10.6e");
  3487.      s = string (PI);                %  --> s = "3.141593e+00"
  3488.  
  3489.  
  3490.  SEE ALSO
  3491.   string, sprintf, double
  3492.  
  3493. --------------------------------------------------------------
  3494.  
  3495. sign
  3496.  
  3497.  SYNOPSIS
  3498.   Compute the sign of a number
  3499.  
  3500.  USAGE
  3501.   y = sign(x)
  3502.  
  3503.  DESCRIPTION
  3504.   The `sign' function returns the sign of an arithmetic type.  If
  3505.   its argument is a complex number (Complex_Type), the
  3506.   `sign' will be applied to the imaginary part of the number.  If
  3507.   the argument is an array, a new array will be created whose elements
  3508.   are obtained from the original array by using the `sign'
  3509.   function.
  3510.  
  3511.   When applied to a real number or an integer, the `sign' function
  3512.   returns -1, 0, or `+1' according to whether the number is
  3513.   less than zero, equal to zero, or greater than zero, respectively.
  3514.  
  3515.  SEE ALSO
  3516.   abs
  3517.  
  3518. --------------------------------------------------------------
  3519.  
  3520. sin
  3521.  
  3522.  SYNOPSIS
  3523.   Compute the sine of a number
  3524.  
  3525.  USAGE
  3526.   y = sin (x)
  3527.  
  3528.  DESCRIPTION
  3529.   The `sin' function computes the sine of a number and
  3530.   returns the result.  If its argument is an array, the
  3531.   `sin' function will be applied to each element and the result returned
  3532.   as an array.
  3533.  
  3534.  SEE ALSO
  3535.   cos, atan, acosh, cosh
  3536.  
  3537. --------------------------------------------------------------
  3538.  
  3539. sinh
  3540.  
  3541.  SYNOPSIS
  3542.   Compute the hyperbolic sine of a number
  3543.  
  3544.  USAGE
  3545.   y = sinh (x)
  3546.  
  3547.  DESCRIPTION
  3548.   The `sinh' function computes the hyperbolic sine of a number and
  3549.   returns the result.  If its argument is an array, the
  3550.   `sinh' function will be applied to each element and the result returned
  3551.   as an array.
  3552.  
  3553.  SEE ALSO
  3554.   cos, atan, acosh, cosh
  3555.  
  3556. --------------------------------------------------------------
  3557.  
  3558. sqr
  3559.  
  3560.  SYNOPSIS
  3561.   Compute the square of a number
  3562.  
  3563.  USAGE
  3564.   y = sqr(x)
  3565.  
  3566.  DESCRIPTION
  3567.   The `sqr' function returns the square of an arithmetic type.  If its
  3568.   argument is a complex number (Complex_Type), then it returns
  3569.   the square of the modulus.  If the argument is an array, a new array
  3570.   will be created whose elements are obtained from the original array
  3571.   by using the `sqr' function.
  3572.  
  3573.  NOTES
  3574.   For real scalar numbers, using `x*x' instead of `sqr(x)'
  3575.   will result in faster executing code.  However, if `x' is an
  3576.   array, then `sqr(x)' will execute faster.
  3577.  
  3578.  SEE ALSO
  3579.   abs, mul2
  3580.  
  3581. --------------------------------------------------------------
  3582.  
  3583. sqrt
  3584.  
  3585.  SYNOPSIS
  3586.   Compute the square root of a number
  3587.  
  3588.  USAGE
  3589.   y = sqrt (x)
  3590.  
  3591.  DESCRIPTION
  3592.   The `sqrt' function computes the square root of a number and
  3593.   returns the result.  If its argument is an array, the
  3594.   `sqrt' function will be applied to each element and the result returned
  3595.   as an array.
  3596.  
  3597.  SEE ALSO
  3598.   sqr, cos, atan, acosh, cosh
  3599.  
  3600. --------------------------------------------------------------
  3601.  
  3602. tan
  3603.  
  3604.  SYNOPSIS
  3605.   Compute the tangent of a number
  3606.  
  3607.  USAGE
  3608.   y = tan (x)
  3609.  
  3610.  DESCRIPTION
  3611.   The `tan' function computes the tangent of a number and
  3612.   returns the result.  If its argument is an array, the
  3613.   `tan' function will be applied to each element and the result returned
  3614.   as an array.
  3615.  
  3616.  SEE ALSO
  3617.   cos, atan, acosh, cosh
  3618.  
  3619. --------------------------------------------------------------
  3620.  
  3621. tanh
  3622.  
  3623.  SYNOPSIS
  3624.   Compute the hyperbolic tangent of a number
  3625.  
  3626.  USAGE
  3627.   y = tanh (x)
  3628.  
  3629.  DESCRIPTION
  3630.   The `tanh' function computes the hyperbolic tangent of a number and
  3631.   returns the result.  If its argument is an array, the
  3632.   `tanh' function will be applied to each element and the result returned
  3633.   as an array.
  3634.  
  3635.  SEE ALSO
  3636.   cos, atan, acosh, cosh
  3637.  
  3638. --------------------------------------------------------------
  3639.  
  3640. _ispos
  3641.  
  3642.  SYNOPSIS
  3643.   Test if a number is greater than 0
  3644.  
  3645.  USAGE
  3646.   Char_Type _ispos(x)
  3647.  
  3648.  DESCRIPTION
  3649.   This function returns 1 if a number is greater than 0, and zero
  3650.   otherwise.  If the argument is an array, then the corresponding
  3651.   array of boolean (Char_Type) values will be returned.
  3652.  
  3653.  SEE ALSO
  3654.   _isneg, _isnonneg
  3655.  
  3656. --------------------------------------------------------------
  3657.  
  3658. _isneg
  3659.  
  3660.  SYNOPSIS
  3661.   Test if a number is less than 0
  3662.  
  3663.  USAGE
  3664.   Char_Type _isneg(x)
  3665.  
  3666.  DESCRIPTION
  3667.   This function returns 1 if a number is less than 0, and zero
  3668.   otherwise.  If the argument is an array, then the corresponding
  3669.   array of boolean (Char_Type) values will be returned.
  3670.  
  3671.  SEE ALSO
  3672.   _ispos, _isnonneg
  3673.  
  3674. --------------------------------------------------------------
  3675.  
  3676. _isnonneg
  3677.  
  3678.  SYNOPSIS
  3679.   Test if a number is greater than or equal to 0
  3680.  
  3681.  USAGE
  3682.   Char_Type _isnonneg(x)
  3683.  
  3684.  DESCRIPTION
  3685.   This function returns 1 if a number is greater or equal to 0, and zero
  3686.   otherwise.  If the argument is an array, then the corresponding
  3687.   array of boolean (Char_Type) values will be returned.
  3688.  
  3689.  SEE ALSO
  3690.   _isneg, _isnonneg
  3691.  
  3692. --------------------------------------------------------------
  3693.  
  3694. errno
  3695.  
  3696.  SYNOPSIS
  3697.   Error code set by system functions
  3698.  
  3699.  USAGE
  3700.   Int_Type errno
  3701.  
  3702.  DESCRIPTION
  3703.   A system function can fail for a variety of reasons.  For example, a
  3704.   file operation may fail because lack of disk space, or the process
  3705.   does not have permission to perform the operation.  Such functions
  3706.   will return -1 and set the variable `errno' to an error
  3707.   code describing the reason for failure.
  3708.  
  3709.   Particular values of `errno' may be specified by the following
  3710.   symbolic constants (read-only variables) and the corresponding
  3711.   `errno_string' value:
  3712.  
  3713.      EPERM            "Not owner"
  3714.      ENOENT           "No such file or directory"
  3715.      ESRCH            "No such process"
  3716.      ENXIO            "No such device or address"
  3717.      ENOEXEC          "Exec format error"
  3718.      EBADF            "Bad file number"
  3719.      ECHILD           "No children"
  3720.      ENOMEM           "Not enough core"
  3721.      EACCES           "Permission denied"
  3722.      EFAULT           "Bad address"
  3723.      ENOTBLK          "Block device required"
  3724.      EBUSY            "Mount device busy"
  3725.      EEXIST           "File exists"
  3726.      EXDEV            "Cross-device link"
  3727.      ENODEV           "No such device"
  3728.      ENOTDIR          "Not a directory"
  3729.      EISDIR           "Is a directory"
  3730.      EINVAL           "Invalid argument"
  3731.      ENFILE           "File table overflow"
  3732.      EMFILE           "Too many open files"
  3733.      ENOTTY           "Not a typewriter"
  3734.      ETXTBSY          "Text file busy"
  3735.      EFBIG            "File too large"
  3736.      ENOSPC           "No space left on device"
  3737.      ESPIPE           "Illegal seek"
  3738.      EROFS            "Read-only file system"
  3739.      EMLINK           "Too many links"
  3740.      EPIPE            "Broken pipe"
  3741.      ELOOP            "Too many levels of symbolic links"
  3742.      ENAMETOOLONG     "File name too long"
  3743.  
  3744.  
  3745.  EXAMPLE
  3746.   The `mkdir' function will attempt to create a directory.  If
  3747.   that directory already exists, the function will fail and set
  3748.   `errno' to EEXIST.
  3749.  
  3750.     define create_dir (dir)
  3751.     {
  3752.        if (0 == mkdir (dir)) return;
  3753.        if (errno != EEXIST)
  3754.          throw IOError, sprintf ("mkdir %s failed: %s",
  3755.                                   dir, errno_string (errno));
  3756.     }
  3757.  
  3758.  
  3759.  SEE ALSO
  3760.   errno_string, error, mkdir
  3761.  
  3762. --------------------------------------------------------------
  3763.  
  3764. errno_string
  3765.  
  3766.  SYNOPSIS
  3767.   Return a string describing an errno.
  3768.  
  3769.  USAGE
  3770.   String_Type errno_string ( [Int_Type err ])
  3771.  
  3772.  DESCRIPTION
  3773.   The `errno_string' function returns a string describing the
  3774.   integer errno code `err'.  If the `err' parameter is
  3775.   omitted, the current value of `errno' will be used. See the
  3776.   description for `errno' for more information.
  3777.  
  3778.  EXAMPLE
  3779.   The `errno_string' function may be used as follows:
  3780.  
  3781.     define sizeof_file (file)
  3782.     {
  3783.        variable st = stat_file (file);
  3784.        if (st == NULL)
  3785.          throw IOError, sprintf ("%s: %s", file, errno_string (errno));
  3786.        return st.st_size;
  3787.     }
  3788.  
  3789.  
  3790.  SEE ALSO
  3791.   errno, stat_file
  3792.  
  3793. --------------------------------------------------------------
  3794.  
  3795. error
  3796.  
  3797.  SYNOPSIS
  3798.   Generate an error condition (deprecated)
  3799.  
  3800.  USAGE
  3801.   error (String_Type msg
  3802.  
  3803.  DESCRIPTION
  3804.   This function has been deprecated in favor of `throw'.
  3805.  
  3806.   The `error' function generates a S-Lang `RunTimeError'
  3807.   exception. It takes a single string parameter which is displayed on
  3808.   the stderr output device.
  3809.  
  3810.  EXAMPLE
  3811.  
  3812.     define add_txt_extension (file)
  3813.     {
  3814.        if (typeof (file) != String_Type)
  3815.          error ("add_extension: parameter must be a string");
  3816.        file += ".txt";
  3817.        return file;
  3818.     }
  3819.  
  3820.  
  3821.  SEE ALSO
  3822.   verror, message
  3823.  
  3824. --------------------------------------------------------------
  3825.  
  3826. __get_exception_info
  3827.  
  3828.  SYNOPSIS
  3829.   Get information about the current exception
  3830.  
  3831.  USAGE
  3832.   Struct_Type __get_exception_info ()
  3833.  
  3834.  DESCRIPTION
  3835.  This function returns information about the currently active
  3836.  exception in the form as a structure with the
  3837.  following fields:
  3838.  
  3839.     error            The current exception, e.g., RunTimeError
  3840.     descr            A description of the exception
  3841.     file             Name of the file generating the exception
  3842.     line             Line number where the exception originated
  3843.     function         Function where the exception originated
  3844.     object           A user-defined object thrown by the exception
  3845.     message          A user-defined message
  3846.  
  3847.  If no exception is active, NULL will be returned.
  3848.  
  3849.  This same information may also be obtained via the optional argument
  3850.  to the `try' statement:
  3851.  
  3852.      variable e = NULL;
  3853.      try (e)
  3854.        {
  3855.           do_something ();
  3856.        }
  3857.      finally
  3858.        {
  3859.           if (e != NULL)
  3860.             vmessage ("An error occured: %s", e.message);
  3861.        }
  3862.  
  3863.  
  3864.  SEE ALSO
  3865.   error
  3866.  
  3867. --------------------------------------------------------------
  3868.  
  3869. message
  3870.  
  3871.  SYNOPSIS
  3872.   Print a string onto the message device
  3873.  
  3874.  USAGE
  3875.   message (String_Type s
  3876.  
  3877.  DESCRIPTION
  3878.   The `message' function will print the string specified by
  3879.   `s' onto the message device.
  3880.  
  3881.  EXAMPLE
  3882.  
  3883.      define print_current_time ()
  3884.      {
  3885.        message (time ());
  3886.      }
  3887.  
  3888.  
  3889.  NOTES
  3890.   The message device will depend upon the application.  For example,
  3891.   the output message device for the jed editor corresponds to the
  3892.   line at the bottom of the display window.  The default message
  3893.   device is the standard output device.
  3894.  
  3895.  SEE ALSO
  3896.   vmessage, sprintf, error
  3897.  
  3898. --------------------------------------------------------------
  3899.  
  3900. new_exception
  3901.  
  3902.  SYNOPSIS
  3903.   Create a new exception
  3904.  
  3905.  USAGE
  3906.   new_exception (String_Type name, Int_Type baseclass, String_Type descr)
  3907.  
  3908.  DESCRIPTION
  3909.   This function creates a new exception called `name' subclassed
  3910.   upon `baseclass'.  The description of the exception is
  3911.   specified by `descr'.
  3912.  
  3913.  EXAMPLE
  3914.  
  3915.   new_exception ("MyError", RunTimeError, "My very own error");
  3916.   try
  3917.     {
  3918.        if (something_is_wrong ())
  3919.          throw MyError;
  3920.     }
  3921.   catch RunTimeError;
  3922.  
  3923.   In this case, catching `RunTimeError' will also catch
  3924.   `MyError' since it is a subclass of `RunTimeError'.
  3925.  
  3926.  SEE ALSO
  3927.   error, verror
  3928.  
  3929. --------------------------------------------------------------
  3930.  
  3931. usage
  3932.  
  3933.  SYNOPSIS
  3934.   Generate a usage error
  3935.  
  3936.  USAGE
  3937.   usage (String_Type msg)
  3938.  
  3939.  DESCRIPTION
  3940.   The `usage' function generates a `UsageError' exception and
  3941.   displays `msg' to the message device.
  3942.  
  3943.  EXAMPLE
  3944.   Suppose that a function called `plot' plots an array of `x' and
  3945.   `y' values.  Then such a function could be written to issue a
  3946.   usage message if the wrong number of arguments was passed:
  3947.  
  3948.     define plot ()
  3949.     {
  3950.        variable x, y;
  3951.  
  3952.        if (_NARGS != 2)
  3953.          usage ("plot (x, y)");
  3954.  
  3955.        (x, y) = ();
  3956.        % Now do the hard part
  3957.           .
  3958.           .
  3959.     }
  3960.  
  3961.  
  3962.  SEE ALSO
  3963.   error, message
  3964.  
  3965. --------------------------------------------------------------
  3966.  
  3967. verror
  3968.  
  3969.  SYNOPSIS
  3970.   Generate an error condition (deprecated)
  3971.  
  3972.  USAGE
  3973.   verror (String_Type fmt, ...)
  3974.  
  3975.  DESCRIPTION
  3976.   This function has been deprecated in favor or `throw'.
  3977.  
  3978.   The `verror' function performs the same role as the `error'
  3979.   function.  The only difference is that instead of a single string
  3980.   argument, `verror' takes a sprintf style argument list.
  3981.  
  3982.  EXAMPLE
  3983.  
  3984.     define open_file (file)
  3985.     {
  3986.        variable fp;
  3987.  
  3988.        fp = fopen (file, "r");
  3989.        if (fp == NULL) verror ("Unable to open %s", file);
  3990.        return fp;
  3991.     }
  3992.  
  3993.  
  3994.  NOTES
  3995.   In the current implementation, the `verror' function is not an
  3996.   intrinsic function.  Rather it is a predefined S-Lang function using
  3997.   a combination of `sprintf' and `error'.
  3998.  
  3999.   To generate a specific exception, a `throw' statement should be
  4000.   used.  In fact, a `throw' statement such as:
  4001.  
  4002.      if (fp == NULL)
  4003.        throw OpenError, "Unable to open $file"$;
  4004.  
  4005.   is preferable to the use of `verror' in the above example.
  4006.  
  4007.  SEE ALSO
  4008.   error, Sprintf, vmessage
  4009.  
  4010. --------------------------------------------------------------
  4011.  
  4012. vmessage
  4013.  
  4014.  SYNOPSIS
  4015.   Print a formatted string onto the message device
  4016.  
  4017.  USAGE
  4018.   vmessage (String_Type fmt, ...)
  4019.  
  4020.  DESCRIPTION
  4021.   The `vmessage' function formats a sprintf style argument list
  4022.   and displays the resulting string onto the message device.
  4023.  
  4024.  NOTES
  4025.   In the current implementation, the `vmessage' function is not an
  4026.   intrinsic function.  Rather it is a predefined S-Lang function using
  4027.   a combination of `Sprintf' and `message'.
  4028.  
  4029.  SEE ALSO
  4030.   message, sprintf, Sprintf, verror
  4031.  
  4032. --------------------------------------------------------------
  4033.  
  4034. _auto_declare
  4035.  
  4036.  SYNOPSIS
  4037.   Set automatic variable declaration mode
  4038.  
  4039.  USAGE
  4040.   Integer_Type _auto_declare
  4041.  
  4042.  DESCRIPTION
  4043.   The `_auto_declare' variable may be used to have undefined
  4044.   variable implicitly declared.  If set to zero, any
  4045.   variable must be declared with a `variable' declaration before it
  4046.   can be used.  If set to one, then any undeclared variable will be
  4047.   declared as a `static' variable.
  4048.  
  4049.   The `_auto_declare' variable is local to each compilation unit and
  4050.   setting its value in one unit has no effect upon its value in other
  4051.   units.   The value of this variable has no effect upon the variables
  4052.   in a function.
  4053.  
  4054.  EXAMPLE
  4055.   The following code will not compile if `X' not been
  4056.   declared:
  4057.  
  4058.     X = 1;
  4059.  
  4060.   However,
  4061.  
  4062.     _auto_declare = 1;   % declare variables as static.
  4063.     X = 1;
  4064.  
  4065.   is equivalent to
  4066.  
  4067.     static variable X = 1;
  4068.  
  4069.  
  4070.  NOTES
  4071.   This variable should be used sparingly and is intended primarily for
  4072.   interactive applications where one types S-Lang commands at a
  4073.   prompt.
  4074.  
  4075. --------------------------------------------------------------
  4076.  
  4077. __class_id
  4078.  
  4079.  SYNOPSIS
  4080.   Return the class-id of a specified type
  4081.  
  4082.  USAGE
  4083.   Int_Type __class_id (DataType_Type type)
  4084.  
  4085.  DESCRIPTION
  4086.   This function returns the internal class-id of a specified data type.
  4087.  
  4088.  SEE ALSO
  4089.   typeof, _typeof, __class_type, __datatype
  4090.  
  4091. --------------------------------------------------------------
  4092.  
  4093. __class_type
  4094.  
  4095.  SYNOPSIS
  4096.   Return the class-type of a specified type
  4097.  
  4098.  USAGE
  4099.   Int_Type __class_type (DataType_Type type))
  4100.  
  4101.  DESCRIPTION
  4102.   Internally S-Lang objects are classified according to four types:
  4103.   scalar, vector, pointer, and memory managed types.  For example, an
  4104.   integer is implemented as a scalar, a complex number as a vector,
  4105.   and a string is represented as a pointer.  The `__class_type'
  4106.   function returns an integer representing the class-type associated
  4107.   with the specified data type. Specifically, it returns:
  4108.  
  4109.        0    memory-managed
  4110.        1    scalar
  4111.        2    vector
  4112.        3    pointer
  4113.  
  4114.  
  4115.  SEE ALSO
  4116.   typeof, _typeof, __class_id, __datatype
  4117.  
  4118. --------------------------------------------------------------
  4119.  
  4120. current_namespace
  4121.  
  4122.  SYNOPSIS
  4123.   Get the name of the current namespace
  4124.  
  4125.  USAGE
  4126.   String_Type current_namespace ()
  4127.  
  4128.  DESCRIPTION
  4129.    The `current_namespace' function returns the name of the
  4130.    static namespace associated with the compilation unit.  If there is
  4131.    no such namespace associated with the compilation unit, then the
  4132.    empty string `""' will be returned.
  4133.  
  4134.  SEE ALSO
  4135.   implements, use_namespace, import, evalfile
  4136.  
  4137. --------------------------------------------------------------
  4138.  
  4139. _eqs
  4140.  
  4141.  SYNOPSIS
  4142.   Test for equality of two objects
  4143.  
  4144.  USAGE
  4145.   Int_Type _eqs (a, b)
  4146.  
  4147.  DESCRIPTION
  4148.   This function tests its two arguments for equality and returns 1 if
  4149.   they are equal or 0 otherwise. What it means to be equal depends
  4150.   upon the data types of the objects being compared.  If the types are
  4151.   numeric, they are regarded as equal if their numerical values are
  4152.   equal.  If they are arrays, then they are equal if they have the
  4153.   same shape with equal elements. If they are structures, then they
  4154.   are equal if they contain identical fields, and the corresponding
  4155.   values are equal.
  4156.  
  4157.  EXAMPLE
  4158.    _eqs (1, 1)             ===> 1
  4159.    _eqs (1, 1.0)           ===> 1
  4160.    _eqs ("a", 1)           ===> 0
  4161.    _eqs ([1,2], [1.0,2.0]) ===> 1
  4162.  
  4163.  SEE ALSO
  4164.   typeof, _eqs, __get_reference, __is_callable
  4165.  
  4166.  NOTES
  4167.    For testing sameness, use `__is_same'.
  4168.  
  4169. --------------------------------------------------------------
  4170.  
  4171. getenv
  4172.  
  4173.  SYNOPSIS
  4174.   Get the value of an environment variable
  4175.  
  4176.  USAGE
  4177.   String_Type getenv(String_Type var)
  4178.  
  4179.  DESCRIPTION
  4180.    The `getenv' function returns a string that represents the
  4181.    value of an environment variable `var'.  It will return
  4182.    NULL if there is no environment variable whose name is given
  4183.    by `var'.
  4184.  
  4185.  EXAMPLE
  4186.  
  4187.     if (NULL != getenv ("USE_COLOR"))
  4188.       {
  4189.         set_color ("normal", "white", "blue");
  4190.         set_color ("status", "black", "gray");
  4191.         USE_ANSI_COLORS = 1;
  4192.       }
  4193.  
  4194.  
  4195.  SEE ALSO
  4196.   putenv, strlen, is_defined
  4197.  
  4198. --------------------------------------------------------------
  4199.  
  4200. __get_reference
  4201.  
  4202.  SYNOPSIS
  4203.   Get a reference to a global object
  4204.  
  4205.  USAGE
  4206.   Ref_Type __get_reference (String_Type nm)
  4207.  
  4208.  DESCRIPTION
  4209.   This function returns a reference to a global variable or function
  4210.   whose name is specified by `nm'.  If no such object exists, it
  4211.   returns NULL, otherwise it returns a reference.
  4212.  
  4213.  EXAMPLE
  4214.    Consider the function:
  4215.  
  4216.     define runhooks (hook)
  4217.     {
  4218.        variable f;
  4219.        f = __get_reference (hook);
  4220.        if (f != NULL)
  4221.          @f ();
  4222.     }
  4223.  
  4224.    This function could be called from another S-Lang function to allow
  4225.    customization of that function, e.g., if the function represents a
  4226.    jed editor mode, the hook could be called to setup keybindings for
  4227.    the mode.
  4228.  
  4229.  SEE ALSO
  4230.   is_defined, typeof, eval, autoload, __is_initialized, __uninitialize
  4231.  
  4232. --------------------------------------------------------------
  4233.  
  4234. implements
  4235.  
  4236.  SYNOPSIS
  4237.   Create a new static namespace
  4238.  
  4239.  USAGE
  4240.   implements (String_Type name)
  4241.  
  4242.  DESCRIPTION
  4243.   The `implements' function may be used to create a new static
  4244.   namespace and have it associated with the current compilation unit.
  4245.   If a namespace with the specified name already exists, a
  4246.   `NamespaceError' exception will be thrown.
  4247.  
  4248.   In addition to creating a new static namespace and associating it
  4249.   with the compilation unit, the function will also create a new
  4250.   private namespace.  As a result, any symbols in the previous private
  4251.   namespace will be no longer be accessable.  For this reason, it is
  4252.   recommended that this function should be used before any private
  4253.   symbols have been created.
  4254.  
  4255.  EXAMPLE
  4256.   Suppose that some file `t.sl' contains:
  4257.  
  4258.      implements ("My");
  4259.      define message (x)
  4260.      {
  4261.         Global->message ("My's message: $x"$);
  4262.      }
  4263.      message ("hello");
  4264.  
  4265.   will produce `"My's message: hello"'.  This `message'
  4266.   function may be accessed from outside the namespace via:
  4267.  
  4268.     My->message ("hi");
  4269.  
  4270.  
  4271.  NOTES
  4272.   Since `message' is an intrinsic function, it is public and may
  4273.   not be redefined in the public namespace.
  4274.  
  4275.   The `implements' function should rarely be used.  It is
  4276.   preferable to allow a static namespace to be associated with a
  4277.   compilation unit using, e.g., `evalfile'.
  4278.  
  4279.  SEE ALSO
  4280.   use_namespace, current_namespace, import
  4281.  
  4282. --------------------------------------------------------------
  4283.  
  4284. __is_callable
  4285.  
  4286.  SYNOPSIS
  4287.   Determine whether or not an object is callable
  4288.  
  4289.  USAGE
  4290.   Int_Type __is_callable (obj)
  4291.  
  4292.  DESCRIPTION
  4293.   This function may be used to determine if an object is callable by
  4294.   dereferencing the object.  It returns 1 if the argument is callable,
  4295.   or zero otherwise.
  4296.  
  4297.  EXAMPLE
  4298.    __is_callable (7)      ==> 0
  4299.    __is_callable (&sin)   ==> 1
  4300.    a = [&sin];
  4301.    __is_callable (a[0])   ==> 1
  4302.    __is_callable (&a[0])  ==> 0
  4303.  
  4304.  SEE ALSO
  4305.   __is_numeric, is_defined
  4306.  
  4307. --------------------------------------------------------------
  4308.  
  4309. __is_numeric
  4310.  
  4311.  SYNOPSIS
  4312.   Determine whether or not an object is a numeric type
  4313.  
  4314.  USAGE
  4315.   Int_Type __is_numeric (obj)
  4316.  
  4317.  DESCRIPTION
  4318.   This function may be used to determine if an object represents a
  4319.   numeric type.  It returns 0 if the argument is non-numeric, 1 if it
  4320.   is an integer, 2 if a floating point number, and 3 if it is complex.
  4321.   If the argument is an array, then the array type will be used for
  4322.   the test.
  4323.  
  4324.  EXAMPLE
  4325.    __is_numeric ("foo");  ==> 0
  4326.    __is_numeric ("0");    ==> 0
  4327.    __is_numeric (0);      ==> 1
  4328.    __is_numeric (PI);     ==> 2
  4329.    __is_numeric (2j);     ==> 3
  4330.    __is_numeric ([1,2]);  ==> 1
  4331.    __is_numeric ({1,2});  ==> 0
  4332.  
  4333.  SEE ALSO
  4334.   typeof, __is_datatype_numeric
  4335.  
  4336. --------------------------------------------------------------
  4337.  
  4338. __is_datatype_numeric
  4339.  
  4340.  SYNOPSIS
  4341.   Determine whether or not a type is a numeric type
  4342.  
  4343.  USAGE
  4344.   Int_Type __is_datatype_numeric (DataType_Type type)
  4345.  
  4346.  DESCRIPTION
  4347.   This function may be used to determine if the specified datatype
  4348.   represents a numeric type.  It returns 0 if the datatype does not
  4349.   represents a numeric type; otherwise it returns 1 for an
  4350.   integer type, 2 for a floating point type, and 3 for a complex type.
  4351.  
  4352.  SEE ALSO
  4353.   typeof, __is_numeric, __is_callable
  4354.  
  4355. --------------------------------------------------------------
  4356.  
  4357. __is_same
  4358.  
  4359.  SYNOPSIS
  4360.   Test for sameness of two objects
  4361.  
  4362.  USAGE
  4363.   Int_Type __is_same (a, b)
  4364.  
  4365.  DESCRIPTION
  4366.   This function tests its two arguments for sameness and returns 1
  4367.   if they are the same, or 0 otherwise.  To be the same, the data type of
  4368.   the arguments must match and the values of the objects must
  4369.   reference the same underlying object.
  4370.  
  4371.  EXAMPLE
  4372.    __is_same (1, 1)         ===> 1
  4373.    __is_same (1, 1.0)       ===> 0
  4374.    __is_same ("a", 1)       ===> 0
  4375.    __is_same ([1,2], [1,2]) ===> 0
  4376.  
  4377.  SEE ALSO
  4378.   typeof, _eqs, __get_reference, __is_callable
  4379.  
  4380.  NOTES
  4381.    For testing equality, use `_eqs'.
  4382.  
  4383. --------------------------------------------------------------
  4384.  
  4385. putenv
  4386.  
  4387.  SYNOPSIS
  4388.   Add or change an environment variable
  4389.  
  4390.  USAGE
  4391.   putenv (String_Type s)
  4392.  
  4393.  DESCRIPTION
  4394.     This functions adds string `s' to the environment.  Typically,
  4395.     `s' should of the form `"name=value"'.  The function
  4396.     throws an `OSError' upon failure.
  4397.  
  4398.  NOTES
  4399.     This function may not be available on all systems.
  4400.  
  4401.  SEE ALSO
  4402.   getenv, sprintf
  4403.  
  4404. --------------------------------------------------------------
  4405.  
  4406. _slang_install_prefix
  4407.  
  4408.  SYNOPSIS
  4409.   S-Lang's installation prefix
  4410.  
  4411.  USAGE
  4412.   String_Type _slang_install_prefix
  4413.  
  4414.  DESCRIPTION
  4415.   The value of this variable is set at the S-Lang library's
  4416.   compilation time.  On Unix systems, the value corresponds to the
  4417.   value of the `prefix' variable in the Makefile.  For normal
  4418.   installations, the library itself will be located in the `lib'
  4419.   subdirectory of the `prefix' directory.
  4420.  
  4421.  NOTES
  4422.   The value of this variable may or may not have anything to do with
  4423.   where the slang library is located.  As such, it should be regarded
  4424.   as a hint.  A standard installation will have the `slsh'
  4425.   library files located in the `share/slsh' subdirectory of the
  4426.   installation prefix.
  4427.  
  4428.  SEE ALSO
  4429.   _slang_doc_dir
  4430.  
  4431. --------------------------------------------------------------
  4432.  
  4433. _slang_utf8_ok
  4434.  
  4435.  SYNOPSIS
  4436.   Test if the interpreter running in UTF-8 mode
  4437.  
  4438.  USAGE
  4439.   Int_Type _slang_utf8_ok
  4440.  
  4441.  DESCRIPTION
  4442.   If the value of this variable is non-zero, then the interpreter is
  4443.   running in UTF-8 mode.  In this mode, characters in strings are
  4444.   interpreted as variable length byte sequences according to the
  4445.   semantics of the UTF-8 encoding.
  4446.  
  4447.  NOTES
  4448.   When running in UTF-8 mode, one must be careful not to confuse a
  4449.   character with a byte.  For example, in this mode the `strlen'
  4450.   function returns the number of characters in a string which may be
  4451.   different than the number of bytes.  The latter information may be
  4452.   obtained by the `strbytelen' function.
  4453.  
  4454.  SEE ALSO
  4455.   strbytelen, strlen, strcharlen
  4456.  
  4457. --------------------------------------------------------------
  4458.  
  4459. __uninitialize
  4460.  
  4461.  SYNOPSIS
  4462.   Uninitialize a variable
  4463.  
  4464.  USAGE
  4465.   __uninitialize (Ref_Type x)
  4466.  
  4467.  DESCRIPTION
  4468.   The `__uninitialize' function may be used to uninitialize the
  4469.   variable referenced by the parameter `x'.
  4470.  
  4471.  EXAMPLE
  4472.   The following two lines are equivalent:
  4473.  
  4474.      () = __tmp(z);
  4475.      __uninitialize (&z);
  4476.  
  4477.  
  4478.  SEE ALSO
  4479.   __tmp, __is_initialized
  4480.  
  4481. --------------------------------------------------------------
  4482.  
  4483. use_namespace
  4484.  
  4485.  SYNOPSIS
  4486.   Change to another namespace
  4487.  
  4488.  USAGE
  4489.   use_namespace (String_Type name)
  4490.  
  4491.  DESCRIPTION
  4492.    The `use_namespace' function changes the current static namespace to
  4493.    the one specified by the parameter.  If the specified namespace
  4494.    does not exist, a `NamespaceError' exception will be generated.
  4495.  
  4496.  SEE ALSO
  4497.   implements, current_namespace, import
  4498.  
  4499. --------------------------------------------------------------
  4500.  
  4501. path_basename
  4502.  
  4503.  SYNOPSIS
  4504.   Get the basename part of a filename
  4505.  
  4506.  USAGE
  4507.   String_Type path_basename (String_Type filename)
  4508.  
  4509.  DESCRIPTION
  4510.    The `path_basename' function returns the basename associated
  4511.    with the `filename' parameter.  The basename is the non-directory
  4512.    part of the filename, e.g., on unix `c' is the basename of
  4513.    `/a/b/c'.
  4514.  
  4515.  SEE ALSO
  4516.   path_dirname, path_extname, path_concat, path_is_absolute
  4517.  
  4518. --------------------------------------------------------------
  4519.  
  4520. path_basename_sans_extname
  4521.  
  4522.  SYNOPSIS
  4523.   Get the basename part of a filename but without the extension
  4524.  
  4525.  USAGE
  4526.   String_Type path_basename_sans_extname (String_Type path)
  4527.  
  4528.  DESCRIPTION
  4529.    The `path_basename_sans_extname' function returns the basename
  4530.    associated with the `filename' parameter, omitting the
  4531.    extension if present.  The basename is the non-directory part of
  4532.    the filename, e.g., on unix `c' is the basename of
  4533.    `/a/b/c'.
  4534.  
  4535.  SEE ALSO
  4536.   path_dirname, path_basename, path_extname, path_concat, path_is_absolute
  4537.  
  4538. --------------------------------------------------------------
  4539.  
  4540. path_concat
  4541.  
  4542.  SYNOPSIS
  4543.   Combine elements of a filename
  4544.  
  4545.  USAGE
  4546.   String_Type path_concat (String_Type dir, String_Type basename)
  4547.  
  4548.  DESCRIPTION
  4549.    The `path_concat' function combines the arguments `dir' and
  4550.    `basename' to produce a filename.  For example, on Unix if
  4551.    `dir' is `x/y' and `basename' is `z', then the
  4552.    function will return `x/y/z'.
  4553.  
  4554.  SEE ALSO
  4555.   path_dirname, path_basename, path_extname, path_is_absolute
  4556.  
  4557. --------------------------------------------------------------
  4558.  
  4559. path_dirname
  4560.  
  4561.  SYNOPSIS
  4562.   Get the directory name part of a filename
  4563.  
  4564.  USAGE
  4565.   String_Type path_dirname (String_Type filename)
  4566.  
  4567.  DESCRIPTION
  4568.    The `path_dirname' function returns the directory name
  4569.    associated with a specified filename.
  4570.  
  4571.  NOTES
  4572.    On systems that include a drive specifier as part of the filename,
  4573.    the value returned by this function will also include the drive
  4574.    specifier.
  4575.  
  4576.  SEE ALSO
  4577.   path_basename, path_extname, path_concat, path_is_absolute
  4578.  
  4579. --------------------------------------------------------------
  4580.  
  4581. path_extname
  4582.  
  4583.  SYNOPSIS
  4584.   Return the extension part of a filename
  4585.  
  4586.  USAGE
  4587.   String_Type path_extname (String_Type filename)
  4588.  
  4589.  DESCRIPTION
  4590.    The `path_extname' function returns the extension portion of the
  4591.    specified filename.  If an extension is present, this function will
  4592.    also include the dot as part of the extension, e.g., if `filename'
  4593.    is `"file.c"', then this function will return `".c"'.  If no
  4594.    extension is present, the function returns an empty string `""'.
  4595.  
  4596.  NOTES
  4597.    Under VMS, the file version number is not returned as part of the
  4598.    extension.
  4599.  
  4600.  SEE ALSO
  4601.   path_sans_extname, path_dirname, path_basename, path_concat, path_is_absolute
  4602.  
  4603. --------------------------------------------------------------
  4604.  
  4605. path_get_delimiter
  4606.  
  4607.  SYNOPSIS
  4608.   Get the value of a search-path delimiter
  4609.  
  4610.  USAGE
  4611.   Char_Type path_get_delimiter ()
  4612.  
  4613.  DESCRIPTION
  4614.   This function returns the value of the character used to delimit
  4615.   fields of a search-path.
  4616.  
  4617.  SEE ALSO
  4618.   set_slang_load_path, get_slang_load_path
  4619.  
  4620. --------------------------------------------------------------
  4621.  
  4622. path_is_absolute
  4623.  
  4624.  SYNOPSIS
  4625.   Determine whether or not a filename is absolute
  4626.  
  4627.  USAGE
  4628.   Int_Type path_is_absolute (String_Type filename)
  4629.  
  4630.  DESCRIPTION
  4631.    The `path_is_absolute' function will return non-zero is
  4632.    `filename' refers to an absolute filename, otherwise it returns zero.
  4633.  
  4634.  SEE ALSO
  4635.   path_dirname, path_basename, path_extname, path_concat
  4636.  
  4637. --------------------------------------------------------------
  4638.  
  4639. path_sans_extname
  4640.  
  4641.  SYNOPSIS
  4642.   Strip the extension from a filename
  4643.  
  4644.  USAGE
  4645.   String_Type path_sans_extname (String_Type filename)
  4646.  
  4647.  DESCRIPTION
  4648.   The `path_sans_extname' function removes the file name extension
  4649.   (including the dot) from the filename and returns the result.
  4650.  
  4651.  SEE ALSO
  4652.   path_basename_sans_extname, path_extname, path_basename, path_dirname, path_concat
  4653.  
  4654. --------------------------------------------------------------
  4655.  
  4656. close
  4657.  
  4658.  SYNOPSIS
  4659.   Close an open file descriptor
  4660.  
  4661.  USAGE
  4662.   Int_Type close (FD_Type fd)
  4663.  
  4664.  DESCRIPTION
  4665.   The `close' function is used to close and open file descriptor
  4666.   created by the `open' function.  Upon success 0 is returned,
  4667.   otherwise the function returns -1 and sets `errno' accordingly.
  4668.  
  4669.  SEE ALSO
  4670.   open, fclose, read, write
  4671.  
  4672. --------------------------------------------------------------
  4673.  
  4674. dup_fd
  4675.  
  4676.  SYNOPSIS
  4677.   Duplicate a file descriptor
  4678.  
  4679.  USAGE
  4680.   FD_Type dup_fd (FD_Type fd)
  4681.  
  4682.  DESCRIPTION
  4683.   The `dup_fd' function duplicates a specified file descriptor and
  4684.   returns the duplicate.  If the function fails, NULL will be
  4685.   returned and `errno' set accordingly.
  4686.  
  4687.  NOTES
  4688.   This function is essentially a wrapper around the POSIX `dup'
  4689.   function.
  4690.  
  4691.  SEE ALSO
  4692.   open, close
  4693.  
  4694. --------------------------------------------------------------
  4695.  
  4696. fileno
  4697.  
  4698.  SYNOPSIS
  4699.   Convert a stdio File_Type object to a FD_Type descriptor
  4700.  
  4701.  USAGE
  4702.   FD_Type fileno (File_Type fp)
  4703.  
  4704.  DESCRIPTION
  4705.   The `fileno' function returns the FD_Type descriptor
  4706.   associated with the stdio File_Type file pointer.  Upon failure,
  4707.   NULL is returned.
  4708.  
  4709.  SEE ALSO
  4710.   fopen, open, fclose, close, dup_fd
  4711.  
  4712. --------------------------------------------------------------
  4713.  
  4714. isatty
  4715.  
  4716.  SYNOPSIS
  4717.   Determine if an open file descriptor refers to a terminal
  4718.  
  4719.  USAGE
  4720.   Int_Type isatty (FD_Type or File_Type fd)
  4721.  
  4722.  DESCRIPTION
  4723.   This function returns 1 if the file descriptor `fd' refers to a
  4724.   terminal; otherwise it returns 0.  The object `fd' may either
  4725.   be a File_Type stdio descriptor or a lower-level FD_Type
  4726.   object.
  4727.  
  4728.  SEE ALSO
  4729.   fopen, fclose, fileno
  4730.  
  4731. --------------------------------------------------------------
  4732.  
  4733. lseek
  4734.  
  4735.  SYNOPSIS
  4736.   Reposition a file descriptor's file pointer
  4737.  
  4738.  USAGE
  4739.   Long_Type lseek (FD_Type fd, LLong_Type ofs, int mode)
  4740.    The `lseek' function repositions the file pointer associated
  4741.    with the open file descriptor `fd' to the offset `ofs'
  4742.    according to the mode parameter.  Specifically, `mode' must be
  4743.    one of the values:
  4744.  
  4745.      SEEK_SET   Set the offset to ofs from the beginning of the file
  4746.      SEEK_CUR   Add ofs to the current offset
  4747.      SEEK_END   Add ofs to the current file size
  4748.  
  4749.    Upon error, `lseek' returns -1 and sets `errno'.  If
  4750.    successful, it returns the new filepointer offset.
  4751.  
  4752.  NOTES
  4753.    Not all file descriptors are capable of supporting the seek
  4754.    operation, e.g., a descriptor associated with a pipe.
  4755.  
  4756.    By using SEEK_END with a positive value of the `ofs'
  4757.    parameter, it is possible to position the file pointer beyond the
  4758.    current size of the file.
  4759.  
  4760.  SEE ALSO
  4761.   fseek, ftell, open, close
  4762.  
  4763. --------------------------------------------------------------
  4764.  
  4765. open
  4766.  
  4767.  SYNOPSIS
  4768.   Open a file
  4769.  
  4770.  USAGE
  4771.   FD_Type open (String_Type filename, Int_Type flags [,Int_Type mode])
  4772.  
  4773.  DESCRIPTION
  4774.   The `open' function attempts to open a file specified by the
  4775.   `filename' parameter according to the `flags' parameter,
  4776.   which must be one of the following values:
  4777.  
  4778.      O_RDONLY   (read-only)
  4779.      O_WRONLY   (write-only)
  4780.      O_RDWR     (read/write)
  4781.  
  4782.   In addition, `flags' may also be bitwise-or'd with any of the
  4783.   following:
  4784.  
  4785.      O_BINARY   (open the file in binary mode)
  4786.      O_TEXT     (open the file in text mode)
  4787.      O_CREAT    (create the file if it does not exist)
  4788.      O_EXCL     (fail if the file already exists)
  4789.      O_NOCTTY   (do not make the device the controlling terminal)
  4790.      O_TRUNC    (truncate the file if it exists)
  4791.      O_APPEND   (open the file in append mode)
  4792.      O_NONBLOCK (open the file in non-blocking mode)
  4793.  
  4794.    Some of these flags make sense only when combined with other flags.
  4795.    For example, if O_EXCL is used, then O_CREAT must also be
  4796.    specified, otherwise unpredictable behavior may result.
  4797.  
  4798.    If O_CREAT is used for the `flags' parameter then the
  4799.    `mode' parameter must be present. `mode' specifies the
  4800.    permissions to use if a new file is created. The actual file
  4801.    permissions will be affected by the process's `umask' via
  4802.    `mode&~umask'.  The `mode' parameter's value is
  4803.    constructed via bitwise-or of the following values:
  4804.  
  4805.      S_IRWXU    (Owner has read/write/execute permission)
  4806.      S_IRUSR    (Owner has read permission)
  4807.      S_IWUSR    (Owner has write permission)
  4808.      S_IXUSR    (Owner has execute permission)
  4809.      S_IRWXG    (Group has read/write/execute permission)
  4810.      S_IRGRP    (Group has read permission)
  4811.      S_IWGRP    (Group has write permission)
  4812.      S_IXGRP    (Group has execute permission)
  4813.      S_IRWXO    (Others have read/write/execute permission)
  4814.      S_IROTH    (Others have read permission)
  4815.      S_IWOTH    (Others have write permission)
  4816.      S_IXOTH    (Others have execute permission)
  4817.  
  4818.    Upon success `open' returns a file descriptor object
  4819.    (FD_Type), otherwise NULL is returned and `errno'
  4820.    is set.
  4821.  
  4822.  NOTES
  4823.    If you are not familiar with the `open' system call, then it
  4824.    is recommended that you use `fopen' instead and use the higher
  4825.    level stdio interface.
  4826.  
  4827.  SEE ALSO
  4828.   fopen, close, read, write, stat_file
  4829.  
  4830. --------------------------------------------------------------
  4831.  
  4832. read
  4833.  
  4834.  SYNOPSIS
  4835.   Read from an open file descriptor
  4836.  
  4837.  USAGE
  4838.   UInt_Type read (FD_Type fd, Ref_Type buf, UInt_Type num)
  4839.  
  4840.  DESCRIPTION
  4841.   The `read' function attempts to read at most `num' bytes
  4842.   into the variable indicated by `buf' from the open file
  4843.   descriptor `fd'.  It returns the number of bytes read, or -1
  4844.   upon failure and sets `errno'.  The number of bytes
  4845.   read may be less than `num', and will be zero if an attempt is
  4846.   made to read past the end of the file.
  4847.  
  4848.  NOTES
  4849.   `read' is a low-level function and may return -1 for a variety
  4850.   of reasons.  For example, if non-blocking I/O has been specified for
  4851.   the open file descriptor and no data is available for reading then
  4852.   the function will return -1 and set `errno' to EAGAIN.
  4853.  
  4854.  SEE ALSO
  4855.   fread, open, close, write
  4856.  
  4857. --------------------------------------------------------------
  4858.  
  4859. write
  4860.  
  4861.  SYNOPSIS
  4862.   Write to an open file descriptor
  4863.  
  4864.  USAGE
  4865.   UInt_Type write (FD_Type fd, BString_Type buf)
  4866.  
  4867.  DESCRIPTION
  4868.    The `write' function attempts to write the bytes specified by
  4869.    the `buf' parameter to the open file descriptor `fd'.  It
  4870.    returns the number of bytes successfully written, or -1 and sets
  4871.    `errno' upon failure.  The number of bytes written may be less
  4872.    than `length(buf)'.
  4873.  
  4874.  SEE ALSO
  4875.   read, fwrite, open, close
  4876.  
  4877. --------------------------------------------------------------
  4878.  
  4879. getegid
  4880.  
  4881.  SYNOPSIS
  4882.   Get the effective group id of the current process
  4883.  
  4884.  USAGE
  4885.   Int_Type getegid ()
  4886.  
  4887.  DESCRIPTION
  4888.   The `getegid' function returns the effective group ID of the
  4889.   current process.
  4890.  
  4891.  NOTES
  4892.   This function is not supported by all systems.
  4893.  
  4894.  SEE ALSO
  4895.   getgid, geteuid, setgid
  4896.  
  4897. --------------------------------------------------------------
  4898.  
  4899. geteuid
  4900.  
  4901.  SYNOPSIS
  4902.   Get the effective user-id of the current process
  4903.  
  4904.  USAGE
  4905.   Int_Type geteuid ()
  4906.  
  4907.  DESCRIPTION
  4908.   The `geteuid' function returns the effective user-id of the
  4909.   current process.
  4910.  
  4911.  NOTES
  4912.   This function is not supported by all systems.
  4913.  
  4914.  SEE ALSO
  4915.   getuid, setuid, setgid
  4916.  
  4917. --------------------------------------------------------------
  4918.  
  4919. getgid
  4920.  
  4921.  SYNOPSIS
  4922.   Get the group id of the current process
  4923.  
  4924.  USAGE
  4925.   Integer_Type getgid ()
  4926.  
  4927.  DESCRIPTION
  4928.   The `getgid' function returns the real group id of the current
  4929.   process.
  4930.  
  4931.  NOTES
  4932.   This function is not supported by all systems.
  4933.  
  4934.  SEE ALSO
  4935.   getpid, getppid
  4936.  
  4937. --------------------------------------------------------------
  4938.  
  4939. getpid
  4940.  
  4941.  SYNOPSIS
  4942.   Get the current process id
  4943.  
  4944.  USAGE
  4945.   Integer_Type getpid ()
  4946.  
  4947.  DESCRIPTION
  4948.   The `getpid' function returns the current process identification
  4949.   number.
  4950.  
  4951.  SEE ALSO
  4952.   getppid, getgid
  4953.  
  4954. --------------------------------------------------------------
  4955.  
  4956. getppid
  4957.  
  4958.  SYNOPSIS
  4959.   Get the parent process id
  4960.  
  4961.  USAGE
  4962.   Integer_Type getppid ()
  4963.  
  4964.  DESCRIPTION
  4965.   The `getpid' function returns the process identification
  4966.   number of the parent process.
  4967.  
  4968.  NOTES
  4969.   This function is not supported by all systems.
  4970.  
  4971.  SEE ALSO
  4972.   getpid, getgid
  4973.  
  4974. --------------------------------------------------------------
  4975.  
  4976. getuid
  4977.  
  4978.  SYNOPSIS
  4979.   Get the user-id of the current process
  4980.  
  4981.  USAGE
  4982.   Int_Type getuid ()
  4983.  
  4984.  DESCRIPTION
  4985.   The `getuid' function returns the user-id of the current
  4986.   process.
  4987.  
  4988.  NOTES
  4989.   This function is not supported by all systems.
  4990.  
  4991.  SEE ALSO
  4992.   getuid, getegid
  4993.  
  4994. --------------------------------------------------------------
  4995.  
  4996. kill
  4997.  
  4998.  SYNOPSIS
  4999.   Send a signal to a process
  5000.  
  5001.  USAGE
  5002.   Integer_Type kill (Integer_Type pid, Integer_Type sig)
  5003.  
  5004.  DESCRIPTION
  5005.   This function may be used to send a signal given by the integer `sig'
  5006.   to the process specified by `pid'.  The function returns zero upon
  5007.   success or `-1' upon failure setting `errno' accordingly.
  5008.  
  5009.  EXAMPLE
  5010.   The `kill' function may be used to determine whether or not
  5011.   a specific process exists:
  5012.  
  5013.     define process_exists (pid)
  5014.     {
  5015.        if (-1 == kill (pid, 0))
  5016.          return 0;     % Process does not exist
  5017.        return 1;
  5018.     }
  5019.  
  5020.  
  5021.  NOTES
  5022.   This function is not supported by all systems.
  5023.  
  5024.  SEE ALSO
  5025.   getpid
  5026.  
  5027. --------------------------------------------------------------
  5028.  
  5029. mkfifo
  5030.  
  5031.  SYNOPSIS
  5032.   Create a named pipe
  5033.  
  5034.  USAGE
  5035.   Int_Type mkfifo (String_Type name, Int_Type mode)
  5036.  
  5037.  DESCRIPTION
  5038.   The `mkfifo' attempts to create a named pipe with the specified
  5039.   name and mode (modified by the process's umask).  The function
  5040.   returns 0 upon success, or -1 and sets `errno' upon failure.
  5041.  
  5042.  NOTES
  5043.   Not all systems support the `mkfifo' function and even on
  5044.   systems that do implement the `mkfifo' system call, the
  5045.   underlying file system may not support the concept of a named pipe,
  5046.   e.g, an NFS filesystem.
  5047.  
  5048.  SEE ALSO
  5049.   stat_file
  5050.  
  5051. --------------------------------------------------------------
  5052.  
  5053. setgid
  5054.  
  5055.  SYNOPSIS
  5056.   Set the group-id of the current process
  5057.  
  5058.  USAGE
  5059.   Int_Type setgid (Int_Type gid)
  5060.  
  5061.  DESCRIPTION
  5062.   The `setgid' function sets the effective group-id of the current
  5063.   process.  It returns zero upon success, or -1 upon error and sets
  5064.   `errno' appropriately.
  5065.  
  5066.  NOTES
  5067.   This function is not supported by all systems.
  5068.  
  5069.  SEE ALSO
  5070.   getgid, setuid
  5071.  
  5072. --------------------------------------------------------------
  5073.  
  5074. setpgid
  5075.  
  5076.  SYNOPSIS
  5077.   Set the process group-id
  5078.  
  5079.  USAGE
  5080.   Int_Type setpgid (Int_Type pid, Int_Type gid)
  5081.  
  5082.  DESCRIPTION
  5083.   The `setpgid' function sets the group-id `gid' of the
  5084.   process whose process-id is `pid'.  If `pid' is 0, then the
  5085.   current process-id will be used.  If `pgid' is 0, then the pid
  5086.   of the affected process will be used.
  5087.  
  5088.   If successful 0 will be returned, otherwise the function will
  5089.   return -1 and set `errno' accordingly.
  5090.  
  5091.  NOTES
  5092.   This function is not supported by all systems.
  5093.  
  5094.  SEE ALSO
  5095.   setgid, setuid
  5096.  
  5097. --------------------------------------------------------------
  5098.  
  5099. setuid
  5100.  
  5101.  SYNOPSIS
  5102.   Set the user-id of the current process
  5103.  
  5104.  USAGE
  5105.   Int_Type setuid (Int_Type id)
  5106.  
  5107.  DESCRIPTION
  5108.   The `setuid' function sets the effective user-id of the current
  5109.   process.  It returns zero upon success, or -1 upon error and sets
  5110.   `errno' appropriately.
  5111.  
  5112.  NOTES
  5113.   This function is not supported by all systems.
  5114.  
  5115.  SEE ALSO
  5116.   setgid, setpgid, getuid, geteuid
  5117.  
  5118. --------------------------------------------------------------
  5119.  
  5120. sleep
  5121.  
  5122.  SYNOPSIS
  5123.   Pause for a specified number of seconds
  5124.  
  5125.  USAGE
  5126.   sleep (Double_Type n)
  5127.  
  5128.  DESCRIPTION
  5129.   The `sleep' function delays the current process for the
  5130.   specified number of seconds.  If it is interrupted by a signal, it
  5131.   will return prematurely.
  5132.  
  5133.  NOTES
  5134.   Not all system support sleeping for a fractional part of a second.
  5135.  
  5136. --------------------------------------------------------------
  5137.  
  5138. system
  5139.  
  5140.  SYNOPSIS
  5141.   Execute a shell command
  5142.  
  5143.  USAGE
  5144.   Integer_Type system (String_Type cmd)
  5145.  
  5146.  DESCRIPTION
  5147.   The `system' function may be used to execute the string
  5148.   expression `cmd' in an inferior shell.  This function is an
  5149.   interface to the C `system' function which returns an
  5150.   implementation-defined result.   On Linux, it returns 127 if the
  5151.   inferior shell could not be invoked, -1 if there was some other
  5152.   error, otherwise it returns the return code for `cmd'.
  5153.  
  5154.  EXAMPLE
  5155.  
  5156.     define dir ()
  5157.     {
  5158.        () = system ("DIR");
  5159.     }
  5160.  
  5161.   displays a directory listing of the current directory under MSDOS or
  5162.   VMS.
  5163.  
  5164.  SEE ALSO
  5165.   popen, listdir
  5166.  
  5167. --------------------------------------------------------------
  5168.  
  5169. umask
  5170.  
  5171.  SYNOPSIS
  5172.   Set the file creation mask
  5173.  
  5174.  USAGE
  5175.   Int_Type umask (Int_Type m)
  5176.  
  5177.  DESCRIPTION
  5178.   The `umask' function sets the file creation mask to the value of
  5179.   `m' and returns the previous mask.
  5180.  
  5181.  SEE ALSO
  5182.   stat_file
  5183.  
  5184. --------------------------------------------------------------
  5185.  
  5186. uname
  5187.  
  5188.  SYNOPSIS
  5189.   Get the system name
  5190.  
  5191.  USAGE
  5192.   Struct_Type uname ()
  5193.  
  5194.  DESCRIPTION
  5195.   The `uname' function returns a structure containing information
  5196.   about the operating system.  The structure contains the following
  5197.   fields:
  5198.  
  5199.        sysname  (Name of the operating system)
  5200.        nodename (Name of the node within the network)
  5201.        release  (Release level of the OS)
  5202.        version  (Current version of the release)
  5203.        machine  (Name of the hardware)
  5204.  
  5205.  
  5206.  NOTES
  5207.   Not all systems support this function.
  5208.  
  5209.  SEE ALSO
  5210.   getenv
  5211.  
  5212. --------------------------------------------------------------
  5213.  
  5214. qualifier
  5215.  
  5216.  SYNOPSIS
  5217.   Get the value of a qualifier
  5218.  
  5219.  USAGE
  5220.   value = qualifier (String_Type name [,default_value])
  5221.  
  5222.  DESCRIPTION
  5223.  This function may be used to get the value of a qualifer.  If the
  5224.  specified qualifier does not exist, `NULL' will be returned,
  5225.  unless a default value has been provided.
  5226.  
  5227.  EXAMPLE
  5228.  
  5229.     define echo (text)
  5230.     {
  5231.        variable fp = qualifier ("out", stdout);
  5232.        () = fputs (text, fp);
  5233.     }
  5234.     echo ("hello");              % writes hello to stdout
  5235.     echo ("hello"; out=stderr);  % writes hello to stderr
  5236.  
  5237.  
  5238.  NOTES
  5239.  Since `NULL' is a valid value for a qualifier, this function is
  5240.  unable to distinguish between a non-existent qualifier and one whose
  5241.  value is `NULL'.  If such a distinction is important, the
  5242.  `qualifier_exists' function can be used.  For example,
  5243.  
  5244.     define echo (text)
  5245.     {
  5246.        variable fp = stdout;
  5247.        if (qualifier_exists ("use_stderr"))
  5248.          fp = stderr;
  5249.        () = fputs (text, fp);
  5250.     }
  5251.     echo ("hello"; use_stderr);  % writes hello to stderr
  5252.  
  5253.  In this case, no value was provided for the `use_stderr'
  5254.  qualifier: it exists but has a value of `NULL'.
  5255.  
  5256.  SEE ALSO
  5257.   qualifier_exists, __qualifiers
  5258.  
  5259. --------------------------------------------------------------
  5260.  
  5261. __qualifiers
  5262.  
  5263.  SYNOPSIS
  5264.   Get the active set of qualifiers
  5265.  
  5266.  USAGE
  5267.   Struct_Type __qualifiers ()
  5268.  
  5269.  DESCRIPTION
  5270.  This function returns the set of qualifiers associated with the
  5271.  current execution context.  If qualifiers are active, then the result
  5272.  is a structure representing the names of the qualifiers and their
  5273.  corresponding values.  Otherwise `NULL' will be returned.
  5274.  
  5275.  One of the main uses of this function is to pass the current set of
  5276.  qualifiers to another another function.  For example, consider a
  5277.  plotting application with a function called called `lineto' that
  5278.  sets the pen-color before drawing the line to the specified point:
  5279.  
  5280.     define lineto (x, y)
  5281.     {
  5282.        % The color may be specified by a qualifier, defaulting to black
  5283.        variable color = qualifier ("color", "black");
  5284.        set_pen_color (color);
  5285.            .
  5286.            .
  5287.     }
  5288.  
  5289.  The `lineto' function permits the color to be specified by a
  5290.  qualifier.  Now consider a function that make use of lineto to draw a
  5291.  line segment between two points:
  5292.  
  5293.     define line_segment (x0, y0, x1, y1)
  5294.     {
  5295.        moveto (x0, y0);
  5296.        lineto (x1, y1 ; color=qualifier("color", "black"));
  5297.     }
  5298.     line_segment (1,1, 10,10; color="blue");
  5299.  
  5300.  Note that in this implementation of `line_segment', the
  5301.  `color' qualifier was explicitely passed to the `lineto'
  5302.  function.  However, this technique does not scale well.  For example, the
  5303.  `lineto' function might also take a qualifer that specifies the
  5304.  line-style, to be used as
  5305.  
  5306.     line_segment (1,1, 10,10; color="blue", linestyle="solid");
  5307.  
  5308.  But the above implementation of `line_segment' does not pass the
  5309.  `linestyle' qualifier.  In such a case, it is preferable to pass
  5310.  all the qualifiers, e.g.,
  5311.  
  5312.     define line_segment (x0, y0, x1, y1)
  5313.     {
  5314.        moveto (x0, y0);
  5315.        lineto (x1, y1 ;; __qualifiers());
  5316.     }
  5317.  
  5318.  Note the use of the double-semi colon in the `lineto'
  5319.  statement.  This tells the parser that the qualifiers are specified
  5320.  by a structure-valued argument and not a set of name-value pairs.
  5321.  
  5322.  SEE ALSO
  5323.   qualifier, qualifier_exists
  5324.  
  5325. --------------------------------------------------------------
  5326.  
  5327. qualifier_exists
  5328.  
  5329.  SYNOPSIS
  5330.   Check for the existence of a qualifier
  5331.  
  5332.  USAGE
  5333.   Int_Type qualifier_exists (String_Type name)
  5334.  
  5335.  DESCRIPTION
  5336.  This function will return 1 if a qualifier of the specified name
  5337.  exists, or 0 otherwise.
  5338.  
  5339.  SEE ALSO
  5340.   qualifier, __qualifiers
  5341.  
  5342. --------------------------------------------------------------
  5343.  
  5344. alarm
  5345.  
  5346.  SYNOPSIS
  5347.   Schedule an alarm signal
  5348.  
  5349.  USAGE
  5350.   alarm (UInt_Type secs [, Ref_Type secs_remaining])
  5351.  
  5352.  DESCRIPTION
  5353.   The `alarm' function schedules the delivery of a SIGALRM
  5354.   signal in `secs' seconds.  Any previously scheduled alarm will
  5355.   be canceled.  If `secs' is zero, then no new alarm will be
  5356.   scheduled.  If the second argument is present, then it must be a
  5357.   reference to a variable whose value will be set upon return to the
  5358.   number of seconds remaining for a previously scheduled alarm to take
  5359.   place.
  5360.  
  5361.  EXAMPLE
  5362.   This example shows demonstrates how the `alarm' function may be
  5363.   used to read from a file within a specified amount of time:
  5364.  
  5365.     define sigalrm_handler (sig)
  5366.     {
  5367.        throw ReadError, "Read timed out";
  5368.     }
  5369.     define read_or_timeout (secs)
  5370.     {
  5371.        variable line, e;
  5372.        variable fp = fopen ("/dev/tty", "r");
  5373.        signal (SIGALRM, &sigalrm_handler);
  5374.        alarm (secs);
  5375.        try (e)
  5376.          {
  5377.             () = fputs ("Enter some text> ", stdout); () = fflush (stdout);
  5378.             if (-1 == fgets (&line, fp))
  5379.               line = NULL;
  5380.          }
  5381.        catch IOError: { message (e.message); line = NULL; }
  5382.        return line;
  5383.     }
  5384.  
  5385.  
  5386.  NOTES
  5387.   Some operating systems may implement the `sleep' function using
  5388.   `alarm'.  As a result, it is not a good idea to mix calls to
  5389.   `alarm' and `sleep'.
  5390.  
  5391.   The default action for SIGALRM is to terminate the process.
  5392.   Hence, if `alarm' is called it is wise to establish a signal
  5393.   handler for `SIGALRM'.
  5394.  
  5395.  SEE ALSO
  5396.   signal, sleep
  5397.  
  5398. --------------------------------------------------------------
  5399.  
  5400. signal
  5401.  
  5402.  SYNOPSIS
  5403.   Establish a signal handler
  5404.  
  5405.  USAGE
  5406.   signal (Int_Type sig, Ref_Type func [,Ref_Type old_func])
  5407.  
  5408.  DESCRIPTION
  5409.   The `signal' function assigns the signal handler represented by
  5410.   `func' to the signal `sig'.  Here `func' is usually
  5411.   reference to a function that takes an integer argument (the signal)
  5412.   and returns nothing, e.g.,
  5413.  
  5414.     define signal_handler (sig)
  5415.     {
  5416.        return;
  5417.     }
  5418.  
  5419.   Alternatively, `func' may be given by one of the symbolic
  5420.   constants SIG_IGN or SIG_DFL to indicate that the
  5421.   signal is to be ignored or given its default action, respectively.
  5422.  
  5423.   The first parameter, `sig', specifies the signal to be handled.
  5424.   The actual supported values vary with the OS.  Common values on Unix
  5425.   include `SIGHUP', `SIGINT', and `SIGTERM'.
  5426.  
  5427.   If a third argument is present, then it must be a reference to a
  5428.   variable whose value will be set to the value of the previously
  5429.   installed handler.
  5430.  
  5431.  EXAMPLE
  5432.   This example establishes a handler for `SIGTSTP'.
  5433.  
  5434.     static define sig_suspend ();  % forward declaration
  5435.     static define sig_suspend (sig)
  5436.     {
  5437.        message ("SIGTSTP received-- stopping");
  5438.        signal (sig, SIG_DFL);
  5439.        () = kill (getpid(), SIGSTOP);
  5440.        message ("Resuming");
  5441.        signal (sig, &sig_suspend);
  5442.     }
  5443.     signal (SIGTSTP, &sig_suspend);
  5444.  
  5445.  
  5446.  NOTES
  5447.   Currently the signal interface is supported only on systems that
  5448.   implement signals according to the POSIX standard.
  5449.  
  5450.   Once a signal has been received, it will remain blocked until after
  5451.   the signal handler has completed.  This is the reason SIGSTOP
  5452.   was used in the above signal handler instead of SIGTSTP.
  5453.  
  5454.  SEE ALSO
  5455.   alarm, sigsuspend, sigprocmask
  5456.  
  5457. --------------------------------------------------------------
  5458.  
  5459. sigprocmask
  5460.  
  5461.  SYNOPSIS
  5462.   Change the list of currently blocked signals
  5463.  
  5464.  USAGE
  5465.   sigprocmask (Int_Type how, Array_Type mask [,Ref_Type old_mask])
  5466.  
  5467.  DESCRIPTION
  5468.   The `sigprocmask' function may be used to change the list of
  5469.   signals that are currently blocked.  The first parameter indicates
  5470.   how this is accomplished.  Specifically, `how' must be one of
  5471.   the following values: SIG_BLOCK, SIG_UNBLOCK, or
  5472.   SIG_SETMASK.
  5473.  
  5474.   If `how' is SIG_BLOCK, then the set of blocked signals
  5475.   will be the union the current set with the values specified in the
  5476.   `mask' argument.
  5477.  
  5478.   If `how' is SIG_UNBLOCK, then the signals specified by
  5479.   the `mask' parameter will be removed from the currently blocked
  5480.   set.
  5481.  
  5482.   If `how' is SIG_SETMASK, then the set of blocked signals
  5483.   will be set to those given by the `mask'.
  5484.  
  5485.   If a third argument is present, then it must be a reference to a
  5486.   variable whose value will be set to the previous signal mask.
  5487.  
  5488.  SEE ALSO
  5489.   signal, sigsuspend, alarm
  5490.  
  5491. --------------------------------------------------------------
  5492.  
  5493. sigsuspend
  5494.  
  5495.  SYNOPSIS
  5496.   Suspend the process until a signal is delivered
  5497.  
  5498.  USAGE
  5499.   sigsuspend ([Array_Type signal_mask])
  5500.  
  5501.  DESCRIPTION
  5502.   The
  5503. sigsuspend
  5504.  function suspends the current process
  5505.   until a signal is received.  An optional array argument may be
  5506.   passed to the function to specify a list of signals that should be
  5507.   temporarily blocked while waiting for a signal.
  5508.  
  5509.  EXAMPLE
  5510.   The following example pauses the current process for 10 seconds
  5511.   while blocking the SIGHUP and SIGINT signals.
  5512.  
  5513.      static variable Tripped;
  5514.      define sigalrm_handler (sig)
  5515.      {
  5516.         Tripped = 1;
  5517.      }
  5518.      signal (SIGALRM, &sigalrm_handler);
  5519.      Tripped = 0;
  5520.      alarm (10);
  5521.      while (Tripped == 0) sigsuspend ([SIGHUP, SIGINT]);
  5522.  
  5523.   Note that in this example the call to `sigsuspend' was wrapped in
  5524.   a while-loop.  This was necessary because there is no guarantee that
  5525.   another signal would not cause `sigsuspend' to return.
  5526.  
  5527.  SEE ALSO
  5528.   signal, alarm, sigprocmask
  5529.  
  5530. --------------------------------------------------------------
  5531.  
  5532. dup
  5533.  
  5534.  SYNOPSIS
  5535.   Duplicate the value at the top of the stack
  5536.  
  5537.  USAGE
  5538.   dup ()
  5539.  
  5540.  DESCRIPTION
  5541.   This function returns an exact duplicate of the object on top of the
  5542.   stack.  For some objects such as arrays or structures, it creates a
  5543.   new reference to the object.  However, for simple scalar S-Lang types such
  5544.   as strings, integers, and doubles, it creates a new copy of the
  5545.   object.
  5546.  
  5547.  SEE ALSO
  5548.   pop, typeof
  5549.  
  5550. --------------------------------------------------------------
  5551.  
  5552. exch
  5553.  
  5554.  SYNOPSIS
  5555.   Exchange two items on the stack
  5556.  
  5557.  USAGE
  5558.   exch ()
  5559.  
  5560.  DESCRIPTION
  5561.   The `exch' swaps the two top items on the stack.
  5562.  
  5563.  SEE ALSO
  5564.   pop, _stk_reverse, _stk_roll
  5565.  
  5566. --------------------------------------------------------------
  5567.  
  5568. pop
  5569.  
  5570.  SYNOPSIS
  5571.   Discard an item from the stack
  5572.  
  5573.  USAGE
  5574.   pop ()
  5575.  
  5576.  DESCRIPTION
  5577.   The `pop' function removes the top item from the stack.
  5578.  
  5579.  SEE ALSO
  5580.   _pop_n, __pop_args
  5581.  
  5582. --------------------------------------------------------------
  5583.  
  5584. __pop_args
  5585.  
  5586.  SYNOPSIS
  5587.   Remove n function arguments from the stack
  5588.  
  5589.  USAGE
  5590.   args = __pop_args(Integer_Type n)
  5591.  
  5592.  DESCRIPTION
  5593.   This function, together with the companion function
  5594.   `__push_args', is useful for creating a function that takes a
  5595.   variable number of arguments, as well as passing the arguments of
  5596.   one function to another function.
  5597.  
  5598.   `__pop_args' removes the specified number of values from the
  5599.   stack and returns them as an array of structures of the corresponding
  5600.   length.  Each structure in the array consists of a single
  5601.   field called `value', which represents the value of the
  5602.   argument.
  5603.  
  5604.  EXAMPLE
  5605.   Consider the following function.  It prints all its arguments to
  5606.   `stdout' separated by spaces:
  5607.  
  5608.     define print_args ()
  5609.     {
  5610.        variable i;
  5611.        variable args = __pop_args (_NARGS);
  5612.  
  5613.        for (i = 0; i < _NARGS; i++)
  5614.          {
  5615.             () = fputs (string (args[i].value), stdout);
  5616.             () = fputs (" ", stdout);
  5617.          }
  5618.        () = fputs ("\n", stdout);
  5619.        () = fflush (stdout);
  5620.     }
  5621.  
  5622.   Now consider the problem of defining a function called `ones'
  5623.   that returns a multi-dimensional array with all the elements set to
  5624.   1.  For example, `ones(10)' should return a 1-d array of 10
  5625.   ones, whereas `ones(10,20)' should return a 10x20 array.
  5626.  
  5627.     define ones ()
  5628.     {
  5629.       !if (_NARGS) return 1;
  5630.       variable a;
  5631.  
  5632.       a = __pop_args (_NARGS);
  5633.       return @Array_Type (Integer_Type, [__push_args (a)]) + 1;
  5634.     }
  5635.  
  5636.   Here, `__push_args' was used to push the arguments passed to
  5637.   the `ones' function onto the stack to be used when dereferencing
  5638.   Array_Type.
  5639.  
  5640.  NOTES
  5641.   This function has been superseded by the `__pop_list' function,
  5642.   which returns the objects as a list instead of an array of structures.
  5643.  
  5644.  SEE ALSO
  5645.   __push_args, __pop_list, __push_list, typeof, _pop_n
  5646.  
  5647. --------------------------------------------------------------
  5648.  
  5649. __pop_list
  5650.  
  5651.  SYNOPSIS
  5652.   Convert items on the stack to a List_Type
  5653.  
  5654.  USAGE
  5655.   List_Type = __pop_list (Int_Type n)
  5656.  
  5657.  DESCRIPTION
  5658.  This function removes a specified number of items from the stack and
  5659.  converts returns them in the form of a list.
  5660.  
  5661.  EXAMPLE
  5662.  
  5663.   define print_args ()
  5664.   {
  5665.      variable list = __pop_list (_NARGS);
  5666.      variable i;
  5667.      _for i (0, length(length)-1, 1)
  5668.         {
  5669.            vmessage ("arg[%d]: %S", list[i]);
  5670.         }
  5671.   }
  5672.  
  5673.  
  5674.  NOTES
  5675.  
  5676.  SEE ALSO
  5677.   __push_list
  5678.  
  5679. --------------------------------------------------------------
  5680.  
  5681. _pop_n
  5682.  
  5683.  SYNOPSIS
  5684.   Remove objects from the stack
  5685.  
  5686.  USAGE
  5687.   _pop_n (Integer_Type n);
  5688.  
  5689.  DESCRIPTION
  5690.   The `_pop_n' function removes the specified number of objects
  5691.   from the top of the stack.
  5692.  
  5693.  SEE ALSO
  5694.   _stkdepth, pop
  5695.  
  5696. --------------------------------------------------------------
  5697.  
  5698. _print_stack
  5699.  
  5700.  SYNOPSIS
  5701.   Print the values on the stack.
  5702.  
  5703.  USAGE
  5704.   _print_stack ()
  5705.  
  5706.  DESCRIPTION
  5707.   This function dumps out what is currently on the S-Lang stack.  It does not
  5708.   alter the stack and it is usually used for debugging purposes.
  5709.  
  5710.  SEE ALSO
  5711.   _stkdepth, string, message
  5712.  
  5713. --------------------------------------------------------------
  5714.  
  5715. __push_args
  5716.  
  5717.  SYNOPSIS
  5718.   Move n function arguments onto the stack
  5719.  
  5720.  USAGE
  5721.   __push_args (Struct_Type args);
  5722.  
  5723.  DESCRIPTION
  5724.   This function together with the companion function `__pop_args'
  5725.   is useful for the creation of functions that take a variable number
  5726.   of arguments.  See the description of `__pop_args' for more
  5727.   information.
  5728.  
  5729.  NOTES
  5730.   This function has been superseded by the `__push_list' function.
  5731.  
  5732.  SEE ALSO
  5733.   __pop_args, __push_list, __pop_list, typeof, _pop_n
  5734.  
  5735. --------------------------------------------------------------
  5736.  
  5737. __push_list
  5738.  
  5739.  SYNOPSIS
  5740.   Push the elements of a list to the stack
  5741.  
  5742.  USAGE
  5743.   __push_list (List_Type list)
  5744.  
  5745.  DESCRIPTION
  5746.  This function pushes the elements of a list to the stack.
  5747.  
  5748.  EXAMPLE
  5749.  
  5750.  private variable list_to_array (list)
  5751.  {
  5752.     return [__push_list (list)];
  5753.  }
  5754.  
  5755.  
  5756.  SEE ALSO
  5757.   __pop_list
  5758.  
  5759. --------------------------------------------------------------
  5760.  
  5761. _stkdepth
  5762.  
  5763.  USAGE
  5764.   Get the number of objects currently on the stack
  5765.  
  5766.  SYNOPSIS
  5767.   Integer_Type _stkdepth ()
  5768.  
  5769.  DESCRIPTION
  5770.   The `_stkdepth' function returns number of items on the stack.
  5771.  
  5772.  SEE ALSO
  5773.   _print_stack, _stk_reverse, _stk_roll
  5774.  
  5775. --------------------------------------------------------------
  5776.  
  5777. _stk_reverse
  5778.  
  5779.  SYNOPSIS
  5780.   Reverse the order of the objects on the stack
  5781.  
  5782.  USAGE
  5783.   _stk_reverse (Integer_Type n)
  5784.  
  5785.  DESCRIPTION
  5786.    The `_stk_reverse' function reverses the order of the top
  5787.    `n' items on the stack.
  5788.  
  5789.  SEE ALSO
  5790.   _stkdepth, _stk_roll
  5791.  
  5792. --------------------------------------------------------------
  5793.  
  5794. _stk_roll
  5795.  
  5796.  SYNOPSIS
  5797.   Roll items on the stack
  5798.  
  5799.  USAGE
  5800.   _stk_roll (Integer_Type n)
  5801.  
  5802.  DESCRIPTION
  5803.   This function may be used to alter the arrangement of objects on the
  5804.   stack.  Specifically, if the integer `n' is positive, the top
  5805.   `n' items on the stack are rotated up.  If
  5806.   `n' is negative, the top `abs(n)' items on the stack are
  5807.   rotated down.
  5808.  
  5809.  EXAMPLE
  5810.   If the stack looks like:
  5811.  
  5812.     item-0
  5813.     item-1
  5814.     item-2
  5815.     item-3
  5816.  
  5817.   where `item-0' is at the top of the stack, then
  5818.   `_stk_roll(-3)' will change the stack to:
  5819.  
  5820.     item-2
  5821.     item-0
  5822.     item-1
  5823.     item-3
  5824.  
  5825.  
  5826.  NOTES
  5827.   This function only has an effect if `abs(n) > 1'.
  5828.  
  5829.  SEE ALSO
  5830.   _stkdepth, _stk_reverse, _pop_n, _print_stack
  5831.  
  5832. --------------------------------------------------------------
  5833.  
  5834. clearerr
  5835.  
  5836.  SYNOPSIS
  5837.   Clear the error of a file stream
  5838.  
  5839.  USAGE
  5840.   clearerr (File_Type fp
  5841.  
  5842.  DESCRIPTION
  5843.   The `clearerr' function clears the error and end-of-file flags
  5844.   associated with the open file stream `fp'.
  5845.  
  5846.  SEE ALSO
  5847.   ferror, feof, fopen
  5848.  
  5849. --------------------------------------------------------------
  5850.  
  5851. fclose
  5852.  
  5853.  SYNOPSIS
  5854.   Close a file
  5855.  
  5856.  USAGE
  5857.   Integer_Type fclose (File_Type fp)
  5858.  
  5859.  DESCRIPTION
  5860.   The `fclose' function may be used to close an open file pointer
  5861.   `fp'.  Upon success it returns zero, and upon failure it sets
  5862.   `errno' and returns `-1'.  Failure usually indicates a that
  5863.   the file system is full or that `fp' does not refer to an open file.
  5864.  
  5865.  NOTES
  5866.   Many C programmers call `fclose' without checking the return
  5867.   value.  The S-Lang language requires the programmer to explicitly
  5868.   handle any value returned by a function.  The simplest way to
  5869.   handle the return value from `fclose' is to call it via:
  5870.  
  5871.      () = fclose (fp);
  5872.  
  5873.  
  5874.  SEE ALSO
  5875.   fopen, fgets, fflush, pclose, errno
  5876.  
  5877. --------------------------------------------------------------
  5878.  
  5879. fdopen
  5880.  
  5881.  SYNOPSIS
  5882.   Convert a FD_Type file descriptor to a stdio File_Type object
  5883.  
  5884.  USAGE
  5885.   File_Type fdopen (FD_Type, String_Type mode)
  5886.  
  5887.  DESCRIPTION
  5888.    The `fdopen' function creates and returns a stdio
  5889.    File_Type object from the open FD_Type
  5890.    descriptor `fd'.  The `mode' parameter corresponds to the
  5891.    `mode' parameter of the `fopen' function and must be
  5892.    consistent with the mode of the descriptor `fd'.  The function
  5893.    returns NULL upon failure and sets `errno'.
  5894.  
  5895.  NOTES
  5896.    The `fclose' function does not close the File_Type object
  5897.    returned from this function.  The underlying file object must be
  5898.    closed by the `close' function.
  5899.  
  5900.  SEE ALSO
  5901.   fileno, fopen, open, close, fclose
  5902.  
  5903. --------------------------------------------------------------
  5904.  
  5905. feof
  5906.  
  5907.  SYNOPSIS
  5908.   Get the end-of-file status
  5909.  
  5910.  USAGE
  5911.   Integer_Type feof (File_Type fp)
  5912.  
  5913.  DESCRIPTION
  5914.   This function may be used to determine the state of the end-of-file
  5915.   indicator of the open file descriptor `fp'.  It returns zero
  5916.   if the indicator is not set, or non-zero if it is.  The end-of-file
  5917.   indicator may be cleared by the `clearerr' function.
  5918.  
  5919.  SEE ALSO
  5920.   ferror, clearerr, fopen
  5921.  
  5922. --------------------------------------------------------------
  5923.  
  5924. ferror
  5925.  
  5926.  SYNOPSIS
  5927.   Determine the error status of an open file descriptor
  5928.  
  5929.  USAGE
  5930.   Integer_Type ferror (File_Type fp)
  5931.  
  5932.  DESCRIPTION
  5933.   This function may be used to determine the state of the error
  5934.   indicator of the open file descriptor `fp'.  It returns zero
  5935.   if the indicator is not set, or non-zero if it is.  The error
  5936.   indicator may be cleared by the `clearerr' function.
  5937.  
  5938.  SEE ALSO
  5939.   feof, clearerr, fopen
  5940.  
  5941. --------------------------------------------------------------
  5942.  
  5943. fflush
  5944.  
  5945.  SYNOPSIS
  5946.   Flush an output stream
  5947.  
  5948.  USAGE
  5949.   Integer_Type fflush (File_Type fp)
  5950.  
  5951.  DESCRIPTION
  5952.   The `fflush' function may be used to update the stdio _output_
  5953.   stream specified by `fp'.  It returns 0 upon success, or
  5954.   -1 upon failure and sets `errno' accordingly.  In
  5955.   particular, this function will fail if `fp' does not represent
  5956.   an open output stream, or if `fp' is associated with a disk file and
  5957.   there is insufficient disk space.
  5958.  
  5959.  EXAMPLE
  5960.   This example illustrates how to use the `fflush' function
  5961.   without regard to the return value:
  5962.  
  5963.     () = fputs ("Enter value> ", stdout);
  5964.     () = fflush (stdout);
  5965.  
  5966.  
  5967.  SEE ALSO
  5968.   fopen, fclose
  5969.  
  5970. --------------------------------------------------------------
  5971.  
  5972. fgets
  5973.  
  5974.  SYNOPSIS
  5975.   Read a line from a file
  5976.  
  5977.  USAGE
  5978.   Integer_Type fgets (SLang_Ref_Type ref, File_Type fp)
  5979.  
  5980.  DESCRIPTION
  5981.   `fgets' reads a line from the open file specified by `fp'
  5982.   and places the characters in the variable whose reference is
  5983.   specified by `ref'.
  5984.   It returns -1 if `fp' is not associated with an open file
  5985.   or an attempt was made to read at the end the file; otherwise, it
  5986.   returns the number of characters read.
  5987.  
  5988.  EXAMPLE
  5989.   The following example returns the lines of a file via a linked list:
  5990.  
  5991.     define read_file (file)
  5992.     {
  5993.        variable buf, fp, root, tail;
  5994.        variable list_type = struct { text, next };
  5995.  
  5996.        root = NULL;
  5997.  
  5998.        fp = fopen(file, "r");
  5999.        if (fp == NULL)
  6000.          error("fopen %s failed." file);
  6001.        while (-1 != fgets (&buf, fp))
  6002.          {
  6003.             if (root == NULL)
  6004.               {
  6005.                  root = @list_type;
  6006.                  tail = root;
  6007.               }
  6008.             else
  6009.               {
  6010.                  tail.next = @list_type;
  6011.                  tail = tail.next;
  6012.               }
  6013.             tail.text = buf;
  6014.             tail.next = NULL;
  6015.          }
  6016.        () = fclose (fp);
  6017.        return root;
  6018.     }
  6019.  
  6020.  
  6021.  SEE ALSO
  6022.   fgetslines, fopen, fclose, fputs, fread, error
  6023.  
  6024. --------------------------------------------------------------
  6025.  
  6026. fgetslines
  6027.  
  6028.  SYNOPSIS
  6029.   Read lines as an array from an open file
  6030.  
  6031.  USAGE
  6032.   String_Type[] fgetslines (File_Type fp [,Int_Type num])
  6033.  
  6034.  DESCRIPTION
  6035.   The `fgetslines' function reads lines a specified number of
  6036.   lines as an array of strings from the file associated with the
  6037.   file pointer `fp'.  If the number of lines to be read is left
  6038.   unspecified, the function will return the rest of the lines in the
  6039.   file.  If the file is empty, an empty string array will be returned.
  6040.   The function returns NULL upon error.
  6041.  
  6042.  EXAMPLE
  6043.   The following function returns the number of lines in a file:
  6044.  
  6045.     define count_lines_in_file (file)
  6046.     {
  6047.        variable fp, lines;
  6048.  
  6049.        fp = fopen (file, "r");
  6050.        if (fp == NULL)
  6051.          return -1;
  6052.  
  6053.        lines = fgetslines (fp);
  6054.        if (lines == NULL)
  6055.          return -1;
  6056.  
  6057.        return length (lines);
  6058.     }
  6059.  
  6060.   Note that the file was implicitly closed when the variable `fp'
  6061.   goes out of scope (in the case, when the function returns).
  6062.  
  6063.  SEE ALSO
  6064.   fgets, fread, fopen, fputslines
  6065.  
  6066. --------------------------------------------------------------
  6067.  
  6068. fopen
  6069.  
  6070.  SYNOPSIS
  6071.   Open a file
  6072.  
  6073.  USAGE
  6074.   File_Type fopen (String_Type f, String_Type m)
  6075.  
  6076.  DESCRIPTION
  6077.   The `fopen' function opens a file `f' according to the mode
  6078.   string `m'.  Allowed values for `m' are:
  6079.  
  6080.      "r"    Read only
  6081.      "w"    Write only
  6082.      "a"    Append
  6083.      "r+"   Reading and writing at the beginning of the file.
  6084.      "w+"   Reading and writing.  The file is created if it does not
  6085.               exist; otherwise, it is truncated.
  6086.      "a+"   Reading and writing at the end of the file.  The file is created
  6087.               if it does not already exist.
  6088.  
  6089.   In addition, the mode string can also include the letter `'b''
  6090.   as the last character to indicate that the file is to be opened in
  6091.   binary mode.
  6092.  
  6093.   Upon success, `fopen' returns a File_Type object which is
  6094.   meant to be used by other operations that require an open file
  6095.   pointer.  Upon failure, the function returns NULL.
  6096.  
  6097.  EXAMPLE
  6098.   The following function opens a file in append mode and writes a
  6099.   string to it:
  6100.  
  6101.     define append_string_to_file (file, str)
  6102.     {
  6103.        variable fp = fopen (file, "a");
  6104.        if (fp == NULL)
  6105.          throw OpenError, "$file could not be opened"$;
  6106.        () = fputs (string, fp);
  6107.        () = fclose (fp);
  6108.     }
  6109.  
  6110.   Note that the return values from `fputs' and `fclose' were
  6111.   ignored.
  6112.  
  6113.  NOTES
  6114.   There is no need to explicitly close a file opened with `fopen'.
  6115.   If the returned File_Type object goes out of scope, the
  6116.   interpreter will automatically close the file.  However, explicitly
  6117.   closing a file with `fclose' and checking its return value is
  6118.   recommended.
  6119.  
  6120.  SEE ALSO
  6121.   fclose, fgets, fputs, popen
  6122.  
  6123. --------------------------------------------------------------
  6124.  
  6125. fprintf
  6126.  
  6127.  SYNOPSIS
  6128.   Create and write a formatted string to a file
  6129.  
  6130.  USAGE
  6131.   Int_Type fprintf (File_Type fp, String_Type fmt, ...)
  6132.  
  6133.  DESCRIPTION
  6134.   `fprintf' formats the objects specified by the variable argument
  6135.   list according to the format `fmt' and write the result to the
  6136.   open file pointer `fp'.
  6137.  
  6138.   The format string obeys the same syntax and semantics as the
  6139.   `sprintf' format string.  See the description of the
  6140.   `sprintf' function for more information.
  6141.  
  6142.   `fprintf' returns the number of bytes written to the file,
  6143.   or -1 upon error.
  6144.  
  6145.  SEE ALSO
  6146.   fputs, printf, fwrite, message
  6147.  
  6148. --------------------------------------------------------------
  6149.  
  6150. fputs
  6151.  
  6152.  SYNOPSIS
  6153.   Write a string to an open stream
  6154.  
  6155.  USAGE
  6156.   Integer_Type fputs (String_Type s, File_Type fp)
  6157.  
  6158.  DESCRIPTION
  6159.   The `fputs' function writes the string `s' to the open file
  6160.   pointer `fp'. It returns -1 upon failure and sets `errno',
  6161.   otherwise it returns the length of the string.
  6162.  
  6163.  EXAMPLE
  6164.   The following function opens a file in append mode and uses the
  6165.   `fputs' function to write to it.
  6166.  
  6167.     define append_string_to_file (str, file)
  6168.     {
  6169.        variable fp;
  6170.        fp = fopen (file, "a");
  6171.        if (fp == NULL)
  6172.          throw OpenError, "Unable to open $file"$;
  6173.        if ((-1 == fputs (s, fp))
  6174.            or (-1 == fclose (fp)))
  6175.          throw WriteError, "Error writing to $file";
  6176.     }
  6177.  
  6178.  
  6179.  NOTES
  6180.   One must not disregard the return value from the `fputs'
  6181.   function.  Doing so may lead to a stack overflow error.
  6182.  
  6183.   To write an object that contains embedded null characters, use the
  6184.   `fwrite' function.
  6185.  
  6186.  SEE ALSO
  6187.   fclose, fopen, fgets, fwrite
  6188.  
  6189. --------------------------------------------------------------
  6190.  
  6191. fputslines
  6192.  
  6193.  SYNOPSIS
  6194.   Write an array of strings to an open file
  6195.  
  6196.  USAGE
  6197.   Int_Type fputslines (String_Type[]a, File_Type fp)
  6198.  
  6199.  DESCRIPTION
  6200.   The `fputslines' function writes an array of strings to the
  6201.   specified file pointer.  It returns the number of elements
  6202.   successfully written.  Any NULL elements in the array will be
  6203.   skipped.
  6204.  
  6205.  EXAMPLE
  6206.  
  6207.     if (length (lines) != fputslines (fp, lines))
  6208.       throw WriteError;
  6209.  
  6210.  
  6211.  SEE ALSO
  6212.   fputs, fgetslines, fopen
  6213.  
  6214. --------------------------------------------------------------
  6215.  
  6216. fread
  6217.  
  6218.  SYNOPSIS
  6219.   Read binary data from a file
  6220.  
  6221.  USAGE
  6222.   UInt_Type fread (Ref_Type b, DataType_Type t, UInt_Type n, File_Type fp)
  6223.  
  6224.  DESCRIPTION
  6225.   The `fread' function may be used to read `n' objects of type
  6226.   `t' from an open file pointer `fp'.  Upon success, it
  6227.   returns the number of objects read from the file and places the
  6228.   objects in variable specified by `b'.  Upon error or
  6229.   end-of-file, it returns -1 and sets `errno' accordingly.
  6230.  
  6231.   If more than one object is read from the file, those objects will be
  6232.   placed in an array of the appropriate size.
  6233.  
  6234.  EXAMPLE
  6235.   The following example illustrates how to read 50 integers from a file:
  6236.  
  6237.      define read_50_ints_from_a_file (file)
  6238.      {
  6239.         variable fp, n, buf;
  6240.  
  6241.         fp = fopen (file, "rb");
  6242.         if (fp == NULL)
  6243.           throw OpenError;
  6244.         n = fread (&buf, Int_Type, 50, fp);
  6245.         if (n == -1)
  6246.           throw ReadError, "fread failed";
  6247.         () = fclose (fp);
  6248.         return buf;
  6249.      }
  6250.  
  6251.  
  6252.  NOTES
  6253.   Use the `pack' and `unpack' functions to read data with a
  6254.   specific byte-ordering.
  6255.  
  6256.   The `fread_bytes' function may be used to read a specified number of
  6257.   bytes in the form of a binary string (`BString_Type').
  6258.  
  6259.  SEE ALSO
  6260.   fread_bytes, fwrite, fgets, fopen, pack, unpack
  6261.  
  6262. --------------------------------------------------------------
  6263.  
  6264. fread_bytes
  6265.  
  6266.  SYNOPSIS
  6267.   Read bytes from a file as a binary-string
  6268.  
  6269.  USAGE
  6270.   UInt_Type fread_bytes (Ref_Type b, UInt_Type n, File_Type fp)
  6271.  
  6272.  DESCRIPTION
  6273.   The `fread_bytes' function may be used to read `n' bytes
  6274.   from from an open file pointer `fp'.  Upon success, it returns
  6275.   the number of bytes read from the file and assigns to the variable
  6276.   attached to the reference `b' a binary string formed from the
  6277.   bytes read.  Upon error or end of file, the function returns
  6278.   -1 and sets `errno' accordingly.
  6279.  
  6280.  NOTES
  6281.   Use the `pack' and `unpack' functions to read data with a
  6282.   specific byte-ordering.
  6283.  
  6284.  SEE ALSO
  6285.   fread, fwrite, fgets, fopen, pack, unpack
  6286.  
  6287. --------------------------------------------------------------
  6288.  
  6289. fseek
  6290.  
  6291.  SYNOPSIS
  6292.   Reposition a stdio stream
  6293.  
  6294.  USAGE
  6295.   Integer_Type fseek (File_Type fp, LLong_Type ofs, Integer_Type whence
  6296.  
  6297.  DESCRIPTION
  6298.   The `fseek' function may be used to reposition the file position
  6299.   pointer associated with the open file stream `fp'. Specifically,
  6300.   it moves the pointer `ofs' bytes relative to the position
  6301.   indicated by `whence'.  If `whence' is set to one of the symbolic
  6302.   constants SEEK_SET, SEEK_CUR, or SEEK_END, the
  6303.   offset is relative to the start of the file, the current position
  6304.   indicator, or end-of-file, respectively.
  6305.  
  6306.   The function returns 0 upon success, or -1 upon failure and sets
  6307.   `errno' accordingly.
  6308.  
  6309.  EXAMPLE
  6310.     define rewind (fp)
  6311.     {
  6312.        if (0 == fseek (fp, 0, SEEK_SET)) return;
  6313.        vmessage ("rewind failed, reason: %s", errno_string (errno));
  6314.     }
  6315.  
  6316.  SEE ALSO
  6317.   ftell, fopen
  6318.  
  6319. --------------------------------------------------------------
  6320.  
  6321. ftell
  6322.  
  6323.  SYNOPSIS
  6324.   Obtain the current position in an open stream
  6325.  
  6326.  USAGE
  6327.   LLong_Type ftell (File_Type fp)
  6328.  
  6329.  DESCRIPTION
  6330.   The ftell function may be used to obtain the current position in the
  6331.   stream associated with the open file pointer `fp'.  It returns
  6332.   the position of the pointer measured in bytes from the beginning of
  6333.   the file.  Upon error, it returns `-1' and sets `errno'
  6334.   accordingly.
  6335.  
  6336.  SEE ALSO
  6337.   fseek, fopen
  6338.  
  6339. --------------------------------------------------------------
  6340.  
  6341. fwrite
  6342.  
  6343.  SYNOPSIS
  6344.   Write binary data to a file
  6345.  
  6346.  USAGE
  6347.   UInt_Type fwrite (b, File_Type fp)
  6348.  
  6349.  DESCRIPTION
  6350.   The `fwrite' function may be used to write the object represented by
  6351.   `b' to an open file.  If `b' is a string or an array, the
  6352.   function will attempt to write all elements of the object to the
  6353.   file.  It returns the number of elements successfully written,
  6354.   otherwise it returns -1 upon error and sets `errno'
  6355.   accordingly.
  6356.  
  6357.  EXAMPLE
  6358.   The following example illustrates how to write an integer array to a
  6359.   file.  In this example, `fp' is an open file descriptor:
  6360.  
  6361.      variable a = [1:50];     % 50 element integer array
  6362.      if (50 != fwrite (a, fp))
  6363.        throw WriteError;
  6364.  
  6365.   Here is how to write the array one element at a time:
  6366.  
  6367.      variable ai, a = [1:50];
  6368.  
  6369.      foreach ai (a)
  6370.        {
  6371.           if (1 != fwrite(ai, fp))
  6372.             throw WriteError;
  6373.        }
  6374.  
  6375.  
  6376.  NOTES
  6377.   Not all data types may be supported the `fwrite' function.  It
  6378.   is supported by all vector, scalar, and string objects.
  6379.  
  6380.  SEE ALSO
  6381.   fread, fputs, fopen, pack, unpack
  6382.  
  6383. --------------------------------------------------------------
  6384.  
  6385. pclose
  6386.  
  6387.  SYNOPSIS
  6388.   Close a process pipe
  6389.  
  6390.  USAGE
  6391.   Integer_Type pclose (File_Type fp)
  6392.  
  6393.  DESCRIPTION
  6394.   The `pclose' function waits for the process associated with
  6395.   `fp' to exit and the returns the exit status of the command.
  6396.  
  6397.  SEE ALSO
  6398.   pclose, fclose
  6399.  
  6400. --------------------------------------------------------------
  6401.  
  6402. popen
  6403.  
  6404.  SYNOPSIS
  6405.   Open a pipe to a process
  6406.  
  6407.  USAGE
  6408.   File_Type popen (String_Type cmd, String_Type mode)
  6409.  
  6410.  DESCRIPTION
  6411.   The `popen' function executes a process specified by `cmd'
  6412.   and opens a unidirectional pipe to the newly created process.  The
  6413.   `mode' indicates whether or not the pipe is open for reading
  6414.   or writing.  Specifically, if `mode' is `"r"', then the
  6415.   pipe is opened for reading, or if `mode' is `"w"', then the
  6416.   pipe will be open for writing.
  6417.  
  6418.   Upon success, a File_Type pointer will be returned, otherwise
  6419.   the function failed and NULL will be returned.
  6420.  
  6421.  NOTES
  6422.   This function is not available on all systems.
  6423.  
  6424.  SEE ALSO
  6425.   pclose, fopen
  6426.  
  6427. --------------------------------------------------------------
  6428.  
  6429. printf
  6430.  
  6431.  SYNOPSIS
  6432.   Create and write a formatted string to stdout
  6433.  
  6434.  USAGE
  6435.   Int_Type printf (String_Type fmt, ...)
  6436.  
  6437.  DESCRIPTION
  6438.   `printf' formats the objects specified by the variable argument
  6439.   list according to the format `fmt' and write the result to
  6440.   `stdout'.  This function is equivalent to `fprintf' used
  6441.   with the `stdout' file pointer.  See `fprintf' for more
  6442.   information.
  6443.  
  6444.   `printf' returns the number of bytes written or -1 upon error.
  6445.  
  6446.  NOTES
  6447.   Many C programmers do not check the return status of the
  6448.   `printf' C library function.  Make sure that if you do not care
  6449.   about whether or not the function succeeds, then code it as in the
  6450.   following example:
  6451.  
  6452.      () = printf ("%s laid %d eggs\n", chicken_name, num_egg);
  6453.  
  6454.  
  6455.  SEE ALSO
  6456.   fputs, printf, fwrite, message
  6457.  
  6458. --------------------------------------------------------------
  6459.  
  6460. create_delimited_string
  6461.  
  6462.  SYNOPSIS
  6463.   Concatenate strings using a delimiter
  6464.  
  6465.  USAGE
  6466.   String_Type create_delimited_string (delim, s_1, s_2, ..., s_n, n)
  6467.  
  6468.     String_Type delim, s_1, ..., s_n
  6469.     Int_Type n
  6470.  
  6471.  
  6472.  DESCRIPTION
  6473.   `create_delimited_string' performs a concatenation operation on
  6474.   the `n' strings `s_1', ...,`s_n', using the string
  6475.   `delim' as a delimiter.  The resulting string is equivalent to
  6476.   one obtained via
  6477.  
  6478.       s_1 + delim + s_2 + delim + ... + s_n
  6479.  
  6480.  
  6481.  EXAMPLE
  6482.  
  6483.     create_delimited_string ("/", "user", "local", "bin", 3);
  6484.  
  6485.   will produce `"usr/local/bin"'.
  6486.  
  6487.  NOTES
  6488.   New code should use the `strjoin' function, which performs a
  6489.   similar task.
  6490.  
  6491.  SEE ALSO
  6492.   strjoin, is_list_element, extract_element, strchop, strcat
  6493.  
  6494. --------------------------------------------------------------
  6495.  
  6496. extract_element
  6497.  
  6498.  SYNOPSIS
  6499.   Extract the nth element of a string with delimiters
  6500.  
  6501.  USAGE
  6502.   String_Type extract_element (String_Type list, Int_Type nth, Int_Type delim)
  6503.  
  6504.  DESCRIPTION
  6505.   The `extract_element' function may be used to extract the
  6506.   `nth' substring of a string delimited by the character given by
  6507.   the `delim' parameter.  If the string contains fewer than the
  6508.   requested substring, the function will return NULL.  Substring
  6509.   elements are numbered from 0.
  6510.  
  6511.  EXAMPLE
  6512.   The expression
  6513.  
  6514.      extract_element ("element 0, element 1, element 2", 1, ',')
  6515.  
  6516.   returns the string `" element 1"', whereas
  6517.  
  6518.      extract_element ("element 0, element 1, element 2", 1, ' ')
  6519.  
  6520.   returns `"0,"'.
  6521.  
  6522.   The following function may be used to compute the number of elements
  6523.   in the list:
  6524.  
  6525.      define num_elements (list, delim)
  6526.      {
  6527.         variable nth = 0;
  6528.         while (NULL != extract_element (list, nth, delim))
  6529.           nth++;
  6530.         return nth;
  6531.      }
  6532.  
  6533.   Alternatively, the `strchop' function may be more useful.  In
  6534.   fact, `extract_element' may be expressed in terms of the
  6535.   function `strchop' as
  6536.  
  6537.     define extract_element (list, nth, delim)
  6538.     {
  6539.        list = strchop(list, delim, 0);
  6540.        if (nth >= length (list))
  6541.          return NULL;
  6542.        else
  6543.          return list[nth];
  6544.     }
  6545.  
  6546.    and the `num_elements' function used above may be recoded more
  6547.    simply as:
  6548.  
  6549.     define num_elements (list, delim)
  6550.     {
  6551.        return length (strchop (length, delim, 0));
  6552.     }
  6553.  
  6554.  
  6555.  NOTES
  6556.   New code should make use of the `List_Type' object for lists.
  6557.  
  6558.  SEE ALSO
  6559.   is_list_element, is_substr, strtok, strchop, create_delimited_string
  6560.  
  6561. --------------------------------------------------------------
  6562.  
  6563. glob_to_regexp
  6564.  
  6565.  SYNOPSIS
  6566.   Convert a globbing expression to a regular expression
  6567.  
  6568.  USAGE
  6569.   String_Type glob_to_regexp (String_Type g)
  6570.  
  6571.  DESCRIPTION
  6572.   This function may be used to convert a so-called globbing expression
  6573.   to a regular expression.  A globbing expression is frequently used
  6574.   for matching filenames where '?' represents a single character and
  6575.   '*' represents 0 or more characters.
  6576.  
  6577.  NOTES
  6578.   The `slsh' program that is distributed with the S-Lang library
  6579.   includes a function called `glob' that is a wrapper around
  6580.   `glob_to_regexp' and `listdir'.  It returns a list of
  6581.   filenames matching a globbing expression.
  6582.  
  6583.  SEE ALSO
  6584.   string_match, listdir
  6585.  
  6586. --------------------------------------------------------------
  6587.  
  6588. is_list_element
  6589.  
  6590.  SYNOPSIS
  6591.   Test whether a delimited string contains a specific element
  6592.  
  6593.  USAGE
  6594.   Int_Type is_list_element (String_Type list, String_Type elem, Int_Type delim)
  6595.  
  6596.  DESCRIPTION
  6597.   The `is_list_element' function may be used to determine whether
  6598.   or not a delimited list of substring, `list', contains the element
  6599.   `elem'.  If `elem' is not an element of `list', the function
  6600.   will return zero, otherwise, it returns 1 plus the matching element
  6601.   number.
  6602.  
  6603.  EXAMPLE
  6604.   The expression
  6605.  
  6606.      is_list_element ("element 0, element 1, element 2", "0,", ' ');
  6607.  
  6608.   returns `2' since `"0,"' is element number one of the list
  6609.   (numbered from zero).
  6610.  
  6611.  SEE ALSO
  6612.   extract_element, is_substr, create_delimited_string
  6613.  
  6614. --------------------------------------------------------------
  6615.  
  6616. is_substr
  6617.  
  6618.  SYNOPSIS
  6619.   Test for a specified substring within a string
  6620.  
  6621.  USAGE
  6622.   Int_Type is_substr (String_Type a, String_Type b)
  6623.  
  6624.  DESCRIPTION
  6625.   This function may be used to determine if `a' contains the
  6626.   string `b'.  If it does not, the function returns 0; otherwise it
  6627.   returns the position of the first occurrence of `b' in `a'
  6628.   expressed in terms of characters, not bytes.
  6629.  
  6630.  NOTES
  6631.   This function regards the first character of a string to be given by
  6632.   a position value of 1.
  6633.  
  6634.   The distinction between characters and bytes is significant in UTF-8
  6635.   mode.
  6636.  
  6637.  SEE ALSO
  6638.   substr, string_match, strreplace
  6639.  
  6640. --------------------------------------------------------------
  6641.  
  6642. make_printable_string
  6643.  
  6644.  SYNOPSIS
  6645.   Format a string suitable for parsing
  6646.  
  6647.  USAGE
  6648.   String_Type make_printable_string(String_Type str)
  6649.  
  6650.  DESCRIPTION
  6651.   This function formats a string in such a way that it may be used as
  6652.   an argument to the `eval' function.  The resulting string is
  6653.   identical to `str' except that it is enclosed in double quotes
  6654.   and the backslash, newline, control, and double quote characters are
  6655.   expanded.
  6656.  
  6657.  SEE ALSO
  6658.   eval, str_quote_string
  6659.  
  6660. --------------------------------------------------------------
  6661.  
  6662. Sprintf
  6663.  
  6664.  SYNOPSIS
  6665.   Format objects into a string (deprecated)
  6666.  
  6667.  USAGE
  6668.   String_Type Sprintf (String_Type format, ..., Int_Type n)
  6669.  
  6670.  DESCRIPTION
  6671.   This function performs a similar task as the `sprintf'
  6672.   function but requires an additional argument that specifies the
  6673.   number of items to format.  For this reason, the `sprintf'
  6674.   function should be used.
  6675.  
  6676.  SEE ALSO
  6677.   sprintf, string, sscanf, vmessage
  6678.  
  6679. --------------------------------------------------------------
  6680.  
  6681. sprintf
  6682.  
  6683.  SYNOPSIS
  6684.   Format objects into a string
  6685.  
  6686.  USAGE
  6687.   String_Type sprintf (String fmt, ...)
  6688.  
  6689.  DESCRIPTION
  6690.   The `sprintf' function formats a string from a variable number
  6691.   of arguments according to according to the format specification
  6692.   string `fmt'.
  6693.  
  6694.   The format string is a C library `sprintf' style format
  6695.   descriptor.  Briefly, the format string may consist of ordinary
  6696.   characters (not including the `%' character), which are copied
  6697.   into the output string as-is, and conversion specification sequences
  6698.   introduced by the `%' character.  The number of additional
  6699.   arguments passed to the `sprintf' function must be consistent
  6700.   with the number required by the format string.
  6701.  
  6702.   The `%' character in the format string starts a conversion
  6703.   specification that indicates how an object is to be formatted.
  6704.   Usually the percent character is followed immediately by a
  6705.   conversion specification character.  However, it may optionally be
  6706.   followed by flag characters, field width characters, and precision
  6707.   modifiers, as described below.
  6708.  
  6709.   The character immediately following the `%' character may be
  6710.   one or more of the following flag characters:
  6711.  
  6712.     -         Use left-justification
  6713.     #         Use alternate form for formatting.
  6714.     0         Use 0 padding
  6715.     +         Preceed a number by a plus or minus sign.
  6716.     (space)   Use a blank instead of a plus sign.
  6717.  
  6718.  
  6719.   The flag characters (if any) may be followed by an optional field
  6720.   width specification string represented by one or more digit
  6721.   characters.  If the size of the formatted object is less than the
  6722.   field width, it will be right-justified in the specified field
  6723.   width, unless the `-' flag was given, in which case it will be
  6724.   left justified.
  6725.  
  6726.   If the next character in the control sequence is a period, then it
  6727.   introduces a precision specification sequence.  The precision is
  6728.   given by the digit characters following the period.  If none are
  6729.   given the precision is taken to be 0.  The meaning of the precision
  6730.   specifier depends upon the type of conversion:  For integer
  6731.   conversions, it gives the minimum number digits to appear in the
  6732.   output.  For `e' and `f' floating point conversions, it
  6733.   gives the number of digits to appear after the decimal point.  For
  6734.   the `g' floating point conversion, it gives the maximum number
  6735.   of significant digits to appear.  Finally for the `s' and
  6736.   `S' conversions it specifies the maximum number of characters
  6737.   to be copied to the output string.
  6738.  
  6739.   The next character in the sequence may be a modifier that controls
  6740.   the size of object to be formatted. It may consist of the following
  6741.   characters:
  6742.  
  6743.      h    This character is ignored in the current implementation.
  6744.      l    The integer is be formatted as a long integer, or a
  6745.           character as a wide character.
  6746.  
  6747.  
  6748.   Finally the conversion specification sequence ends with the
  6749.   conversion specification character that describes how the object is
  6750.   to be
  6751.   formatted:
  6752.  
  6753.      s    as a string
  6754.      f    as a floating point number
  6755.      e    as a float using exponential form, e.g., 2.345e08
  6756.      g    format as e or g, depending upon its value
  6757.      c    as a character
  6758.      %    a literal percent character
  6759.      d    as a signed decimal integer
  6760.      u    as an unsigned decimal integer
  6761.      o    as an octal integer
  6762.      X    as hexadecimal
  6763.      S    convert object to a string and format accordingly
  6764.  
  6765.   The `S' conversion specifier is a S-Lang extension which will
  6766.   cause the corresponding object to be converted to a string using the
  6767.   `string' function, and then converted as `s'. formatted as
  6768.   string.  In fact, `sprintf("%S",x)' is equivalent to
  6769.   `sprintf("%s",string(x))'.
  6770.  
  6771.  EXAMPLE
  6772.  
  6773.     sprintf("%s","hello")               ===> "hello"
  6774.     sprintf("%s %s","hello", "world")   ===> "hello world"
  6775.     sprintf("Agent %.3d",7)             ===> "Agent 007"
  6776.     sprintf("%S",PI)                    ===> "3.14159"
  6777.     sprintf("%g",PI)                    ===> "3.14159"
  6778.     sprintf("%.2g",PI)                  ===> "3.1"
  6779.     sprintf("%.2e",PI)                  ===> "3.14e+00"
  6780.     sprintf("%.2f",PI)                  ===> "3.14"
  6781.     sprintf("|% 8.2f|",PI)              ===> "|    3.14|"
  6782.     sprintf("|%-8.2f|",PI)              ===> "|3.14    |"
  6783.     sprintf("|%+8.2f|",PI)              ===> "|   +3.14|"
  6784.     sprintf("%S",{1,2,3})               ===> "List_Type with 3 elements"
  6785.     sprintf("%S",1+2i)                  ===> "(1 + 2i)"
  6786.  
  6787.  
  6788.  NOTES
  6789.   The `set_float_format' function controls the format for the
  6790.   `S' conversion of floating point numbers.
  6791.  
  6792.  SEE ALSO
  6793.   string, sscanf, message
  6794.  
  6795. --------------------------------------------------------------
  6796.  
  6797. sscanf
  6798.  
  6799.  SYNOPSIS
  6800.   Parse a formatted string
  6801.  
  6802.  USAGE
  6803.   Int_Type sscanf (s, fmt, r1, ... rN)
  6804.  
  6805.     String_Type s, fmt;
  6806.     Ref_Type r1, ..., rN
  6807.  
  6808.  
  6809.  DESCRIPTION
  6810.  The `sscanf' function parses the string `s' according to the
  6811.  format `fmt' and sets the variables whose references are given by
  6812.  `r1', ..., `rN'.  The function returns the number of
  6813.  references assigned, or throws an exception upon error.
  6814.  
  6815.  The format string `fmt' consists of ordinary characters and
  6816.  conversion specifiers.  A conversion specifier begins with the
  6817.  special character `%' and is described more fully below.  A white
  6818.  space character in the format string matches any amount of whitespace
  6819.  in the input string.  Parsing of the format string stops whenever a
  6820.  match fails.
  6821.  
  6822.  The `%' character is used to denote a conversion specifier whose
  6823.  general form is given by `%[*][width][type]format' where the
  6824.  brackets indicate optional items.  If `*' is present, then the
  6825.  conversion will be performed but no assignment to a reference will be
  6826.  made.  The `width' specifier specifies the maximum field width to
  6827.  use for the conversion.  The `type' modifier is used to indicate
  6828.  the size of the object, e.g., a short integer, as follows.
  6829.  
  6830.  If _type_ is given as the character `h', then if the format
  6831.  conversion is for an integer (`dioux'), the object assigned will
  6832.  be a short integer.  If _type_ is `l', then the conversion
  6833.  will be to a long integer for integer conversions, or to a double
  6834.  precision floating point number for floating point conversions.
  6835.  
  6836.  The format specifier is a character that specifies the conversion:
  6837.  
  6838.        %     Matches a literal percent character.  No assignment is
  6839.              performed.
  6840.        d     Matches a signed decimal integer.
  6841.        D     Matches a long decimal integer (equiv to `ld')
  6842.        u     Matches an unsigned decimal integer
  6843.        U     Matches an unsigned long decimal integer (equiv to `lu')
  6844.        i     Matches either a hexadecimal integer, decimal integer, or
  6845.              octal integer.
  6846.        I     Equivalent to `li'.
  6847.        x     Matches a hexadecimal integer.
  6848.        X     Matches a long hexadecimal integer (same as `lx').
  6849.        e,f,g Matches a decimal floating point number (Float_Type).
  6850.        E,F,G Matches a double precision floating point number, same as `lf'.
  6851.        s     Matches a string of non-whitespace characters (String_Type).
  6852.        c     Matches one character.  If width is given, width
  6853.              characters are matched.
  6854.        n     Assigns the number of characters scanned so far.
  6855.        [...] Matches zero or more characters from the set of characters
  6856.              enclosed by the square brackets.  If '^' is given as the
  6857.              first character, then the complement set is matched.
  6858.  
  6859.  
  6860.  EXAMPLE
  6861.  Suppose that `s' is `"Coffee: (3,4,12.4)"'.  Then
  6862.  
  6863.     n = sscanf (s, "%[a-zA-Z]: (%d,%d,%lf)", &item, &x, &y, &z);
  6864.  
  6865.  will set `n' to 4, `item' to `"Coffee"', `x' to 3,
  6866.  `y' to 4, and `z' to the double precision number
  6867.  `12.4'.  However,
  6868.  
  6869.     n = sscanf (s, "%s: (%d,%d,%lf)", &item, &x, &y, &z);
  6870.  
  6871.  will set `n' to 1, `item' to `"Coffee:"' and the
  6872.  remaining variables will not be assigned.
  6873.  
  6874.  SEE ALSO
  6875.   sprintf, unpack, string, atof, int, integer, string_match
  6876.  
  6877. --------------------------------------------------------------
  6878.  
  6879. strbytelen
  6880.  
  6881.  SYNOPSIS
  6882.   Get the number of bytes in a string
  6883.  
  6884.  USAGE
  6885.   Int_Type strbytelen (String_Type s)
  6886.  
  6887.  DESCRIPTION
  6888.   This function returns the number of bytes in a string.  In UTF-8
  6889.   mode, this value is generally different from the number of
  6890.   characters in a string.  For the latter information, the
  6891.   `strlen' or `strcharlen' functions should be used.
  6892.  
  6893.  SEE ALSO
  6894.   strlen, strcharlen, length
  6895.  
  6896. --------------------------------------------------------------
  6897.  
  6898. strbytesub
  6899.  
  6900.  SYNOPSIS
  6901.   Replace a byte with another in a string.
  6902.  
  6903.  USAGE
  6904.   String_Type strsub (String_Type s, Int_Type pos, UChar_Type b)
  6905.  
  6906.  DESCRIPTION
  6907.   The `strbytesub' function may be be used to substitute the byte
  6908.   `b' for the byte at byte position `pos' of the string
  6909.   `s'.  The resulting string is returned.
  6910.  
  6911.  NOTES
  6912.   The first byte in the string `s' is specified by `pos'
  6913.   equal to 1.  This function uses byte semantics, not character
  6914.   semantics.
  6915.  
  6916.  SEE ALSO
  6917.   strsub, is_substr, strreplace, strbytelen
  6918.  
  6919. --------------------------------------------------------------
  6920.  
  6921. strcat
  6922.  
  6923.  SYNOPSIS
  6924.   Concatenate strings
  6925.  
  6926.  USAGE
  6927.   String_Type strcat (String_Type a_1, ...,  String_Type a_N)
  6928.  
  6929.  DESCRIPTION
  6930.    The `strcat' function concatenates its N string
  6931.    arguments `a_1', ... `a_N' together and returns the result.
  6932.  
  6933.  EXAMPLE
  6934.  
  6935.     strcat ("Hello", " ", "World");
  6936.  
  6937.    produces the string `"Hello World"'.
  6938.  
  6939.  NOTES
  6940.    This function is equivalent to the binary operation `a_1+...+a_N'.
  6941.    However, `strcat' is much faster making it the preferred method
  6942.    to concatenate strings.
  6943.  
  6944.  SEE ALSO
  6945.   sprintf, strjoin
  6946.  
  6947. --------------------------------------------------------------
  6948.  
  6949. strcharlen
  6950.  
  6951.  SYNOPSIS
  6952.   Get the number of characters in a string including combining characters
  6953.  
  6954.  USAGE
  6955.   Int_Type strcharlen (String_Type s)
  6956.  
  6957.  DESCRIPTION
  6958.   The `strcharlen' function returns the number of characters in a
  6959.   string.  If the string contains combining characters, then they are
  6960.   also counted.  Use the `strlen' function to obtain the
  6961.   character count ignoring combining characters.
  6962.  
  6963.  SEE ALSO
  6964.   strlen, strbytelen
  6965.  
  6966. --------------------------------------------------------------
  6967.  
  6968. strchop
  6969.  
  6970.  SYNOPSIS
  6971.   Chop or split a string into substrings.
  6972.  
  6973.  USAGE
  6974.   String_Type[] strchop (String_Type str, Int_Type delim, Int_Type quote)
  6975.  
  6976.  DESCRIPTION
  6977.    The `strchop' function may be used to split-up a string
  6978.    `str' that consists of substrings delimited by the character
  6979.    specified by `delim'.  If the integer `quote' is non-zero,
  6980.    it will be taken as a quote character for the delimiter.  The
  6981.    function returns the substrings as an array.
  6982.  
  6983.  EXAMPLE
  6984.    The following function illustrates how to sort a comma separated
  6985.    list of strings:
  6986.  
  6987.      define sort_string_list (a)
  6988.      {
  6989.         variable i, b, c;
  6990.         b = strchop (a, ',', 0);
  6991.  
  6992.         i = array_sort (b);
  6993.         b = b[i];   % rearrange
  6994.  
  6995.         % Convert array back into comma separated form
  6996.         return strjoin (b, ",");
  6997.      }
  6998.  
  6999.  
  7000.  SEE ALSO
  7001.   strchopr, strjoin, strtok
  7002.  
  7003. --------------------------------------------------------------
  7004.  
  7005. strchopr
  7006.  
  7007.  SYNOPSIS
  7008.   Chop or split a string into substrings.
  7009.  
  7010.  USAGE
  7011.   String_Type[] strchopr (String_Type str, String_Type delim, String_Type quote)
  7012.  
  7013.  DESCRIPTION
  7014.   This routine performs exactly the same function as `strchop' except
  7015.   that it returns the substrings in the reverse order.  See the
  7016.   documentation for `strchop' for more information.
  7017.  
  7018.  SEE ALSO
  7019.   strchop, strtok, strjoin
  7020.  
  7021. --------------------------------------------------------------
  7022.  
  7023. strcmp
  7024.  
  7025.  SYNOPSIS
  7026.   Compare two strings
  7027.  
  7028.  USAGE
  7029.   Int_Type strcmp (String_Type a, String_Type b)
  7030.  
  7031.  DESCRIPTION
  7032.    The `strcmp' function may be used to perform a case-sensitive
  7033.    string comparison, in the lexicographic sense, on strings `a' and
  7034.    `b'.  It returns 0 if the strings are identical, a negative integer
  7035.    if `a' is less than `b', or a positive integer if `a' is greater
  7036.    than `b'.
  7037.  
  7038.  EXAMPLE
  7039.    The `strup' function may be used to perform a case-insensitive
  7040.    string comparison:
  7041.  
  7042.     define case_insensitive_strcmp (a, b)
  7043.     {
  7044.       return strcmp (strup(a), strup(b));
  7045.     }
  7046.  
  7047.  
  7048.  NOTES
  7049.    One may also use one of the binary comparison operators, e.g.,
  7050.    `a > b'.
  7051.  
  7052.  SEE ALSO
  7053.   strup, strncmp
  7054.  
  7055. --------------------------------------------------------------
  7056.  
  7057. strcompress
  7058.  
  7059.  SYNOPSIS
  7060.   Remove excess whitespace characters from a string
  7061.  
  7062.  USAGE
  7063.   String_Type strcompress (String_Type s, String_Type white)
  7064.  
  7065.  DESCRIPTION
  7066.   The `strcompress' function compresses the string `s' by
  7067.   replacing a sequence of one or more characters from the set
  7068.   `white' by the first character of `white'. In addition, it
  7069.   also removes all leading and trailing characters from `s' that
  7070.   are part of `white'.
  7071.  
  7072.  EXAMPLE
  7073.   The expression
  7074.  
  7075.     strcompress (",;apple,,cherry;,banana", ",;");
  7076.  
  7077.   returns the string `"apple,cherry,banana"'.
  7078.  
  7079.  SEE ALSO
  7080.   strtrim, strtrans, str_delete_chars
  7081.  
  7082. --------------------------------------------------------------
  7083.  
  7084. string_match
  7085.  
  7086.  SYNOPSIS
  7087.   Match a string against a regular expression
  7088.  
  7089.  USAGE
  7090.   Int_Type string_match(String_Type str, String_Type pat, Int_Type nth)
  7091.  
  7092.  DESCRIPTION
  7093.   The `string_match' function returns zero if `str' does not
  7094.   match regular expression specified by `pat'.  This function
  7095.   performs the match starting at the `nth' byte in the string
  7096.   `str' (numbered from 1).  This function returns the position in
  7097.   bytes (numbered from 1) of the start of the match in `str'.
  7098.   The exact substring matched may be found using
  7099.   `string_match_nth'.
  7100.  
  7101.  NOTES
  7102.   Positions in the string are specified using byte-offsets not
  7103.   character offsets. The value returned by this function is measured
  7104.   from the beginning of the string `str'.
  7105.  
  7106.   The function is not yet UTF-8 aware.  If possible, consider using
  7107.   the `pcre' module for better, more sophisticated regular
  7108.   expressions.
  7109.  
  7110.  SEE ALSO
  7111.   string_match_nth, strcmp, strncmp
  7112.  
  7113. --------------------------------------------------------------
  7114.  
  7115. string_match_nth
  7116.  
  7117.  SYNOPSIS
  7118.   Get the result of the last call to string_match
  7119.  
  7120.  USAGE
  7121.   (Int_Type pos, Int_Type len) = string_match_nth(Int_Type nth)
  7122.  
  7123.  DESCRIPTION
  7124.   The `string_match_nth' function returns two integers describing
  7125.   the result of the last call to `string_match'.  It returns both
  7126.   the zero-based byte-position of the `nth' submatch and
  7127.   the length of the match.
  7128.  
  7129.   By convention, `nth' equal to zero means the entire match.
  7130.   Otherwise, `nth' must be an integer with a value 1 through 9,
  7131.   and refers to the set of characters matched by the `nth' regular
  7132.   expression enclosed by the pairs `\(, \)'.
  7133.  
  7134.  EXAMPLE
  7135.   Consider:
  7136.  
  7137.      variable matched, pos, len;
  7138.      matched = string_match("hello world", "\([a-z]+\) \([a-z]+\)"R, 1);
  7139.      if (matched)
  7140.        (pos, len) = string_match_nth(2);
  7141.  
  7142.   This will set `matched' to 1 since a match will be found at the
  7143.   first byte position, `pos' to 6 since `w' is offset 6 bytes
  7144.   from the beginning of the string, and `len' to 5 since
  7145.   `"world"' is 5 bytes long.
  7146.  
  7147.  NOTES
  7148.   The position offset is _not_ affected by the value of the offset
  7149.   parameter to the `string_match' function. For example, if the
  7150.   value of the last parameter to the `string_match' function had
  7151.   been 3, `pos' would still have been set to 6.
  7152.  
  7153.  SEE ALSO
  7154.   string_match
  7155.  
  7156. --------------------------------------------------------------
  7157.  
  7158. strjoin
  7159.  
  7160.  SYNOPSIS
  7161.   Concatenate elements of a string array
  7162.  
  7163.  USAGE
  7164.   String_Type strjoin (Array_Type a, String_Type delim)
  7165.  
  7166.  DESCRIPTION
  7167.    The `strjoin' function operates on an array of strings by joining
  7168.    successive elements together separated with a delimiter `delim'.
  7169.    If `delim' is the empty string `""', then the result will
  7170.    simply be the concatenation of the elements.
  7171.  
  7172.  EXAMPLE
  7173.    Suppose that
  7174.  
  7175.       days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
  7176.  
  7177.    Then `strjoin (days,"+")' will produce
  7178.    `"Sun+Mon+Tue+Wed+Thu+Fri+Sat+Sun"'.  Similarly,
  7179.    `strjoin (["","",""], "X")' will produce `"XX"'.
  7180.  
  7181.  SEE ALSO
  7182.   strchop, strcat
  7183.  
  7184. --------------------------------------------------------------
  7185.  
  7186. strlen
  7187.  
  7188.  SYNOPSIS
  7189.   Compute the length of a string
  7190.  
  7191.  USAGE
  7192.   Int_Type strlen (String_Type a)
  7193.  
  7194.  DESCRIPTION
  7195.    The `strlen' function may be used to compute the character
  7196.    length of a string ignoring the presence of combining characters.
  7197.    The `strcharlen' function may be used to count combining
  7198.    characters as distinct characters.  For byte-semantics, use the
  7199.    `strbytelen' function.
  7200.  
  7201.  EXAMPLE
  7202.    After execution of
  7203.  
  7204.    variable len = strlen ("hello");
  7205.  
  7206.    `len' will have a value of `5'.
  7207.  
  7208.  SEE ALSO
  7209.   strbytelen, strcharlen, bstrlen, length, substr
  7210.  
  7211. --------------------------------------------------------------
  7212.  
  7213. strlow
  7214.  
  7215.  SYNOPSIS
  7216.   Convert a string to lowercase
  7217.  
  7218.  USAGE
  7219.   String_Type strlow (String_Type s)
  7220.  
  7221.  DESCRIPTION
  7222.   The `strlow' function takes a string `s' and returns another
  7223.   string identical to `s' except that all upper case characters
  7224.   that are contained in `s' are converted converted to lower case.
  7225.  
  7226.  EXAMPLE
  7227.   The function
  7228.  
  7229.     define Strcmp (a, b)
  7230.     {
  7231.       return strcmp (strlow (a), strlow (b));
  7232.     }
  7233.  
  7234.   performs a case-insensitive comparison operation of two strings by
  7235.   converting them to lower case first.
  7236.  
  7237.  SEE ALSO
  7238.   strup, tolower, strcmp, strtrim, define_case
  7239.  
  7240. --------------------------------------------------------------
  7241.  
  7242. strnbytecmp
  7243.  
  7244.  SYNOPSIS
  7245.   Compare the first n bytes of two strings
  7246.  
  7247.  USAGE
  7248.   Int_Type strnbytecmp (String_Type a, String_Type b, Int_Type n)
  7249.  
  7250.  DESCRIPTION
  7251.   This function compares the first `n' bytes of the strings
  7252.   `a' and `b'.  See the documentation for `strcmp' for
  7253.   information about the return value.
  7254.  
  7255.  SEE ALSO
  7256.   strncmp, strncharcmp, strcmp
  7257.  
  7258. --------------------------------------------------------------
  7259.  
  7260. strncharcmp
  7261.  
  7262.  SYNOPSIS
  7263.   Compare the first n characters of two strings
  7264.  
  7265.  USAGE
  7266.   Int_Type strncharcmp (String_Type a, String_Type b, Int_Type n)
  7267.  
  7268.  DESCRIPTION
  7269.   This function compares the first `n' characters of the strings
  7270.   `a' and `b' counting combining characters as distinct
  7271.   characters.  See the documentation for `strcmp' for information
  7272.   about the return value.
  7273.  
  7274.  SEE ALSO
  7275.   strncmp, strnbytecmp, strcmp
  7276.  
  7277. --------------------------------------------------------------
  7278.  
  7279. strncmp
  7280.  
  7281.  SYNOPSIS
  7282.   Compare the first few characters of two strings
  7283.  
  7284.  USAGE
  7285.   Int_Type strncmp (String_Type a, String_Type b, Int_Type n)
  7286.  
  7287.  DESCRIPTION
  7288.   This function behaves like `strcmp' except that it compares only the
  7289.   first `n' characters in the strings `a' and `b'.
  7290.   See the documentation for `strcmp' for information about the return
  7291.   value.
  7292.  
  7293.   In counting characters, combining characters are not counted,
  7294.   although they are used in the comparison.  Use the
  7295.   `strncharcmp' function if you want combining characters to be
  7296.   included in the character count.  The `strnbytecmp' function
  7297.   should be used to compare bytes.
  7298.  
  7299.  EXAMPLE
  7300.   The expression
  7301.  
  7302.      strcmp ("apple", "appliance", 3);
  7303.  
  7304.   will return zero since the first three characters match.
  7305.  
  7306.  NOTES
  7307.   This function uses character semantics.
  7308.  
  7309.  SEE ALSO
  7310.   strcmp, strlen, strncharcmp, strnbytecmp
  7311.  
  7312. --------------------------------------------------------------
  7313.  
  7314. strreplace
  7315.  
  7316.  SYNOPSIS
  7317.   Replace one or more substrings
  7318.  
  7319.  USAGE
  7320.   (new, n) = strreplace (a, b, c, max_n)
  7321.  
  7322.    String_Type a, b, c, rep;
  7323.    Int_Type n, max_n;
  7324.  
  7325.  
  7326.  DESCRIPTION
  7327.   The `strreplace' function may be used to replace one or more
  7328.   occurrences of `b' in `a' with `c'.  If the integer
  7329.   `max_n' is positive, then the first `max_n' occurrences of
  7330.   `b' in `a' will be replaced.  Otherwise, if `max_n' is
  7331.   negative, then the last `abs(max_n)' occurrences will be replaced.
  7332.  
  7333.   The function returns the resulting string and an integer indicating
  7334.   how many replacements were made.
  7335.  
  7336.  EXAMPLE
  7337.   The following function illustrates how `strreplace' may be used
  7338.   to remove all occurrences of a specified substring:
  7339.  
  7340.      define delete_substrings (a, b)
  7341.      {
  7342.         (a, ) = strreplace (a, b, "", strlen (a));
  7343.         return a;
  7344.      }
  7345.  
  7346.  
  7347.  SEE ALSO
  7348.   is_substr, strsub, strtrim, strtrans, str_delete_chars
  7349.  
  7350. --------------------------------------------------------------
  7351.  
  7352. strsub
  7353.  
  7354.  SYNOPSIS
  7355.   Replace a character with another in a string.
  7356.  
  7357.  USAGE
  7358.   String_Type strsub (String_Type s, Int_Type pos, Int_Type ch)
  7359.  
  7360.  DESCRIPTION
  7361.   The `strsub' function may be used to substitute the character
  7362.   `ch' for the character at character position `pos' of the string
  7363.   `s'.  The resulting string is returned.
  7364.  
  7365.  EXAMPLE
  7366.  
  7367.     define replace_spaces_with_comma (s)
  7368.     {
  7369.       variable n;
  7370.       while (n = is_substr (s, " "), n) s = strsub (s, n, ',');
  7371.       return s;
  7372.     }
  7373.  
  7374.   For uses such as this, the `strtrans' function is a better choice.
  7375.  
  7376.  NOTES
  7377.   The first character in the string `s' is specified by `pos'
  7378.   equal to 1.  This function uses character semantics, not byte
  7379.   semantics.
  7380.  
  7381.  SEE ALSO
  7382.   is_substr, strreplace, strlen
  7383.  
  7384. --------------------------------------------------------------
  7385.  
  7386. strtok
  7387.  
  7388.  SYNOPSIS
  7389.   Extract tokens from a string
  7390.  
  7391.  USAGE
  7392.   String_Type[] strtok (String_Type str [,String_Type white])
  7393.  
  7394.  DESCRIPTION
  7395.   `strtok' breaks the string `str' into a series of tokens
  7396.   and returns them as an array of strings.  If the second parameter
  7397.   `white' is present, then it specifies the set of characters
  7398.   that are to be regarded as whitespace when extracting the tokens,
  7399.   and may consist of the whitespace characters or a range of such
  7400.   characters. If the first character of `white' is `'^'',
  7401.   then the whitespace characters consist of all characters except
  7402.   those in `white'.  For example, if `white' is `"
  7403.   \t\n,;."', then those characters specify the whitespace
  7404.   characters.  However, if `white' is given by
  7405.   `"^a-zA-Z0-9_"', then any character is a whitespace character
  7406.   except those in the ranges `a-z', `A-Z', `0-9', and
  7407.   the underscore character.  To specify the hyphen character as a
  7408.   whitespace character, then it should be the first character of the
  7409.   whitespace string.  In addition to ranges, the whitespace specifier
  7410.   may also include character classes:
  7411.  
  7412.     \w matches a unicode "word" character, taken to be alphanumeric.
  7413.     \a alphabetic character, excluding digits
  7414.     \s matches whitespace
  7415.     \l matches lowercase
  7416.     \u matches uppercase
  7417.     \d matches a digit
  7418.     \\ matches a backslash
  7419.     \^ matches a ^ character
  7420.  
  7421.  
  7422.   If the second parameter is not present, then it defaults to
  7423.   `"\s"'.
  7424.  
  7425.  EXAMPLE
  7426.   The following example may be used to count the words in a text file:
  7427.  
  7428.     define count_words (file)
  7429.     {
  7430.        variable fp, line, count;
  7431.  
  7432.        fp = fopen (file, "r");
  7433.        if (fp == NULL) return -1;
  7434.  
  7435.        count = 0;
  7436.        while (-1 != fgets (&line, fp))
  7437.          {
  7438.            line = strtok (line, "^\\a");
  7439.            count += length (line);
  7440.          }
  7441.        () = fclose (fp);
  7442.        return count;
  7443.     }
  7444.  
  7445.   Here a word was assumed to consist only of alphabetic characters.
  7446.  
  7447.  SEE ALSO
  7448.   strchop, strcompress, strjoin
  7449.  
  7450. --------------------------------------------------------------
  7451.  
  7452. strtrans
  7453.  
  7454.  SYNOPSIS
  7455.   Replace characters in a string
  7456.  
  7457.  USAGE
  7458.   String_Type strtrans (str, old_set, new_set)
  7459.  
  7460.    String_Type str, old_set, new_set;
  7461.  
  7462.  
  7463.  DESCRIPTION
  7464.   The `strtrans' function may be used to replace all the characters
  7465.   from the set `old_set' with the corresponding characters from
  7466.   `new_set' in the string `str'.  If `new_set' is empty,
  7467.   then the characters in `old_set' will be removed from `str'.
  7468.  
  7469.   If `new_set' is not empty, then `old_set' and
  7470.   `new_set' must be commensurate.  Each set may consist of
  7471.   character ranges such as `A-Z' and character classes:
  7472.  
  7473.     \w matches a unicode "word" character, taken to be alphanumeric.
  7474.     \a alphabetic character, excluding digits
  7475.     \s matches whitespace
  7476.     \l matches lowercase
  7477.     \u matches uppercase
  7478.     \d matches a digit
  7479.     \\ matches a backslash
  7480.     \^ matches a ^ character
  7481.  
  7482.   If the first character of a set is `^' then the set is taken to
  7483.   be the complement set.
  7484.  
  7485.  EXAMPLE
  7486.  
  7487.     str = strtrans (str, "\\u", "\\l");   % lower-case str
  7488.     str = strtrans (str, "^0-9", " ");    % Replace anything but 0-9 by space
  7489.     str = strtrans (str, "\\^0-9", " ");  % Replace '^' and 0-9 by a space
  7490.  
  7491.  
  7492.  SEE ALSO
  7493.   strreplace, strtrim, strup, strlow
  7494.  
  7495. --------------------------------------------------------------
  7496.  
  7497. strtrim
  7498.  
  7499.  SYNOPSIS
  7500.   Remove whitespace from the ends of a string
  7501.  
  7502.  USAGE
  7503.   String_Type strtrim (String_Type s [,String_Type w])
  7504.  
  7505.  DESCRIPTION
  7506.   The `strtrim' function removes all leading and trailing whitespace
  7507.   characters from the string `s' and returns the result.  The
  7508.   optional second parameter specifies the set of whitespace
  7509.   characters.  If the argument is not present, then the set defaults
  7510.   to `"\s"'.  The whitespace specification may consist of
  7511.   character ranges such as `A-Z' and character classes:
  7512.  
  7513.     \w matches a unicode "word" character, taken to be alphanumeric.
  7514.     \a alphabetic character, excluding digits
  7515.     \s matches whitespace
  7516.     \l matches lowercase
  7517.     \u matches uppercase
  7518.     \d matches a digit
  7519.     \\ matches a backslash
  7520.     \^ matches a ^ character
  7521.  
  7522.   If the first character of a set is `^' then the set is taken to
  7523.   be the complement set.
  7524.  
  7525.  SEE ALSO
  7526.   strtrim_beg, strtrim_end, strcompress
  7527.  
  7528. --------------------------------------------------------------
  7529.  
  7530. strtrim_beg
  7531.  
  7532.  SYNOPSIS
  7533.   Remove leading whitespace from a string
  7534.  
  7535.  USAGE
  7536.   String_Type strtrim_beg (String_Type s [,String_Type w])
  7537.  
  7538.  DESCRIPTION
  7539.   The `strtrim_beg' function removes all leading whitespace
  7540.   characters from the string `s' and returns the result.
  7541.   The optional second parameter specifies the set of whitespace
  7542.   characters.  See the documentation for the `strtrim' function
  7543.   form more information about the whitespace parameter.
  7544.  
  7545.  SEE ALSO
  7546.   strtrim, strtrim_end, strcompress
  7547.  
  7548. --------------------------------------------------------------
  7549.  
  7550. strtrim_end
  7551.  
  7552.  SYNOPSIS
  7553.   Remove trailing whitespace from a string
  7554.  
  7555.  USAGE
  7556.   String_Type strtrim_end (String_Type s [,String_Type w])
  7557.  
  7558.  DESCRIPTION
  7559.   The `strtrim_end' function removes all trailing whitespace
  7560.   characters from the string `s' and returns the result.  The
  7561.   optional second parameter specifies the set of whitespace
  7562.   characters.  See the documentation for the `strtrim' function
  7563.   form more information about the whitespace parameter.
  7564.  
  7565.  SEE ALSO
  7566.   strtrim, strtrim_beg, strcompress
  7567.  
  7568. --------------------------------------------------------------
  7569.  
  7570. strup
  7571.  
  7572.  SYNOPSIS
  7573.   Convert a string to uppercase
  7574.  
  7575.  USAGE
  7576.   String_Type strup (String_Type s)
  7577.  
  7578.  DESCRIPTION
  7579.   The `strup' function takes a string `s' and returns another
  7580.   string identical to `s' except that all lower case characters
  7581.   that contained in `s' are converted to upper case.
  7582.  
  7583.  EXAMPLE
  7584.   The function
  7585.  
  7586.     define Strcmp (a, b)
  7587.     {
  7588.       return strcmp (strup (a), strup (b));
  7589.     }
  7590.  
  7591.   performs a case-insensitive comparison operation of two strings by
  7592.   converting them to upper case first.
  7593.  
  7594.  SEE ALSO
  7595.   strlow, toupper, strcmp, strtrim, define_case, strtrans
  7596.  
  7597. --------------------------------------------------------------
  7598.  
  7599. str_delete_chars
  7600.  
  7601.  SYNOPSIS
  7602.   Delete characters from a string
  7603.  
  7604.  USAGE
  7605.   String_Type str_delete_chars (String_Type str, String_Type del_set
  7606.  
  7607.  DESCRIPTION
  7608.   This function may be used to delete the set of characters specified
  7609.   by `del_set' from the string `str'.  The result is returned.
  7610.  
  7611.   The set of characters to be deleted may include ranges such as
  7612.   `A-Z' and characters classes:
  7613.  
  7614.     \w matches a unicode "word" character, taken to be alphanumeric.
  7615.     \a alphabetic character, excluding digits
  7616.     \s matches whitespace
  7617.     \l matches lowercase
  7618.     \u matches uppercase
  7619.     \d matches a digit
  7620.     \\ matches a backslash
  7621.     \^ matches a ^ character
  7622.  
  7623.   If the first character of `del_set' is `^', then the set
  7624.   is taken to be the complement of the remaining string.
  7625.  
  7626.  EXAMPLE
  7627.  
  7628.     str = str_delete_chars (str, "^A-Za-z");
  7629.  
  7630.   will remove all characters except `A-Z' and `a-z' from
  7631.   `str'.  Similarly,
  7632.  
  7633.     str = str_delete_chars (str, "^\\a");
  7634.  
  7635.   will remove all but the alphabetic characters.
  7636.  
  7637.  SEE ALSO
  7638.   strtrans, strreplace, strcompress
  7639.  
  7640. --------------------------------------------------------------
  7641.  
  7642. str_quote_string
  7643.  
  7644.  SYNOPSIS
  7645.   Escape characters in a string.
  7646.  
  7647.  USAGE
  7648.   String_Type str_quote_string(String_Type str, String_Type qlis, Int_Type quote)
  7649.  
  7650.  DESCRIPTION
  7651.   The `str_quote_string' returns a string identical to `str'
  7652.   except that all characters contained in the string `qlis' are
  7653.   escaped with the `quote' character, including the quote
  7654.   character itself.  This function is useful for making a string that
  7655.   can be used in a regular expression.
  7656.  
  7657.  EXAMPLE
  7658.   Execution of the statements
  7659.  
  7660.    node = "Is it [the coat] really worth $100?";
  7661.    tag = str_quote_string (node, "\\^$[]*.+?", '\\');
  7662.  
  7663.   will result in `tag' having the value:
  7664.  
  7665.     Is it \[the coat\] really worth \$100\?
  7666.  
  7667.  
  7668.  SEE ALSO
  7669.   str_uncomment_string, make_printable_string
  7670.  
  7671. --------------------------------------------------------------
  7672.  
  7673. str_replace
  7674.  
  7675.  SYNOPSIS
  7676.   Replace a substring of a string (deprecated)
  7677.  
  7678.  USAGE
  7679.   Int_Type str_replace (String_Type a, String_Type b, String_Type c)
  7680.  
  7681.  DESCRIPTION
  7682.   The `str_replace' function replaces the first occurrence of `b' in
  7683.   `a' with `c' and returns an integer that indicates whether a
  7684.   replacement was made.  If `b' does not occur in `a', zero is
  7685.   returned.  However, if `b' occurs in `a', a non-zero integer is
  7686.   returned as well as the new string resulting from the replacement.
  7687.  
  7688.  NOTES
  7689.   This function has been superceded by `strreplace'.  It should no
  7690.   longer be used.
  7691.  
  7692.  SEE ALSO
  7693.   strreplace
  7694.  
  7695. --------------------------------------------------------------
  7696.  
  7697. str_uncomment_string
  7698.  
  7699.  SYNOPSIS
  7700.   Remove comments from a string
  7701.  
  7702.  USAGE
  7703.   String_Type str_uncomment_string(String_Type s, String_Type beg, String_Type end)
  7704.  
  7705.  DESCRIPTION
  7706.   This function may be used to remove simple forms of comments from a
  7707.   string `s'. The parameters, `beg' and `end', are strings
  7708.   of equal length whose corresponding characters specify the begin and
  7709.   end comment characters, respectively.  It returns the uncommented
  7710.   string.
  7711.  
  7712.  EXAMPLE
  7713.   The expression
  7714.  
  7715.      str_uncomment_string ("Hello (testing) 'example' World", "'(", "')")
  7716.  
  7717.   returns the string `"Hello   World"'.
  7718.  
  7719.  NOTES
  7720.   This routine does not handle multicharacter comment delimiters and it
  7721.   assumes that comments are not nested.
  7722.  
  7723.  SEE ALSO
  7724.   str_quote_string, str_delete_chars, strtrans
  7725.  
  7726. --------------------------------------------------------------
  7727.  
  7728. substr
  7729.  
  7730.  SYNOPSIS
  7731.   Extract a substring from a string
  7732.  
  7733.  USAGE
  7734.   String_Type substr (String_Type s, Int_Type n, Int_Type len)
  7735.  
  7736.  DESCRIPTION
  7737.   The `substr' function returns a substring with character length
  7738.   `len' of the string `s' beginning at the character position
  7739.   `n'.  If `len' is `-1', the entire length of the string
  7740.   `s' will be used for `len'.  The first character of `s'
  7741.   is given by `n' equal to 1.
  7742.  
  7743.  EXAMPLE
  7744.  
  7745.      substr ("To be or not to be", 7, 5);
  7746.  
  7747.   returns `"or no"'
  7748.  
  7749.  NOTES
  7750.   In many cases it is more convenient to use array indexing rather
  7751.   than the `substr' function.  In fact, if UTF-8 mode is not in
  7752.   effect, `substr(s,i+1,strlen(s))' is equivalent to
  7753.   `s[[i:]]'.  Array indexing uses byte-semantics, not character
  7754.   semantics assumed by the `substr' function.
  7755.  
  7756.  SEE ALSO
  7757.   is_substr, substrbytes, strlen
  7758.  
  7759. --------------------------------------------------------------
  7760.  
  7761. substrbytes
  7762.  
  7763.  SYNOPSIS
  7764.   Extract a byte sequence from a string
  7765.  
  7766.  USAGE
  7767.   String_Type substrbytes (String_Type s, Int_Type n, Int_Type len)
  7768.  
  7769.  DESCRIPTION
  7770.   The `substrbytes' function returns a substring with byte length
  7771.   `len' of the string `s' beginning at the byte position
  7772.   `n', counting from 1.  If `len' is `-1', the entire
  7773.   byte-length of the string `s' will be used for `len'.  The first
  7774.   byte of `s' is given by `n' equal to 1.
  7775.  
  7776.  EXAMPLE
  7777.  
  7778.      substrbytes ("To be or not to be", 7, 5);
  7779.  
  7780.   returns `"or no"'
  7781.  
  7782.  NOTES
  7783.   In many cases it is more convenient to use array indexing rather
  7784.   than the `substr' function.  In fact
  7785.   `substrbytes(s,i+1,-1)' is equivalent to
  7786.   `s[[i:]]'.
  7787.  
  7788.   The function `substr' may be used if character semantics are
  7789.   desired.
  7790.  
  7791.  SEE ALSO
  7792.   substr, strbytelen
  7793.  
  7794. --------------------------------------------------------------
  7795.  
  7796. __add_binary
  7797.  
  7798.  SYNOPSIS
  7799.   Extend a binary operation to a user defined type
  7800.  
  7801.  USAGE
  7802.   __add_binary(op, return_type, binary_funct, lhs_type, rhs_type)
  7803.  
  7804.    String_Type op;
  7805.    Ref_Type binary_funct;
  7806.    DataType_Type return_type, lhs_type, rhs_type;
  7807.  
  7808.  
  7809.  DESCRIPTION
  7810.   The `__add_binary' function is used to specify a function to be
  7811.   called when a binary operation takes place between specified data
  7812.   types.  The first parameter indicates the binary operator and must
  7813.   be one of the following:
  7814.  
  7815.    "+", "-", "*", "/", "==", "!=", ">", ">=", "<", "<=", "^",
  7816.    "or", "and", "&", "|", "xor", "shl", "shr", "mod"
  7817.  
  7818.   The second parameter (`binary_funct') specifies the function to
  7819.   be called when the binary function takes place between the
  7820.   types `lhs_type' and `rhs_type'.  The `return_type'
  7821.   parameter stipulates the return values of the function and the data
  7822.   type of the result of the binary operation.
  7823.  
  7824.   The data type for `lhs_type' or `rhs_type' may be left
  7825.   unspecified by using Any_Type for either of these values.
  7826.   However, at least one of the parameters must correspond to a
  7827.   user-defined datatype.
  7828.  
  7829.  EXAMPLE
  7830.   This example defines a vector data type and extends the "*" operator
  7831.   to the new type:
  7832.  
  7833.     typedef struct { x, y, z } Vector_Type;
  7834.     define vector (x, y, z)
  7835.     {
  7836.        variable v = @Vector_Type;
  7837.        v.x = x;
  7838.        v.y = y;
  7839.        v.z = z;
  7840.        return v;
  7841.     }
  7842.     static define vector_scalar_mul (v, a)
  7843.     {
  7844.        return vector (a*v.x, a*v.y, a*v.z);
  7845.     }
  7846.     static define scalar_vector_mul (a, v)
  7847.     {
  7848.        return vector_scalar_mul (v, a);
  7849.     }
  7850.     static define dotprod (v1,v2)
  7851.     {
  7852.        return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
  7853.     }
  7854.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  7855.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  7856.     __add_binary ("*", Double_Type, &dotprod, Vector_Type, Vector_Type);
  7857.  
  7858.  
  7859.  SEE ALSO
  7860.   __add_unary, __add_string, __add_destroy
  7861.  
  7862. --------------------------------------------------------------
  7863.  
  7864. __add_string
  7865.  
  7866.  SYNOPSIS
  7867.   Specify a string representation for a user-defined type
  7868.  
  7869.  USAGE
  7870.   __add_string (DataType_Type user_type, Ref_Type func)
  7871.  
  7872.  DESCRIPTION
  7873.   The `__add_string' function specifies a function to be called
  7874.   when a string representation is required for the specified
  7875.   user-defined datatype.
  7876.  
  7877.  EXAMPLE
  7878.   Consider the `Vector_Type' object defined in the example
  7879.   for the `__add_binary' function.
  7880.  
  7881.      static define vector_string (v)
  7882.      {
  7883.         return sprintf ("[%S,%S,%S]", v.x, v.y, v.z);
  7884.      }
  7885.      __add_string (Vector_Type, &vector_string);
  7886.  
  7887.   Then
  7888.  
  7889.      v = vector (3, 4, 5);
  7890.      vmessage ("v=%S", v);
  7891.  
  7892.   will generate the message:
  7893.  
  7894.      v=[3,4,5]
  7895.  
  7896.  
  7897.  SEE ALSO
  7898.   __add_unary, __add_binary, __add_destroy, __add_typecast
  7899.  
  7900. --------------------------------------------------------------
  7901.  
  7902. __add_typecast
  7903.  
  7904.  SYNOPSIS
  7905.   Add a typecast-function for a user-defined type
  7906.  
  7907.  USAGE
  7908.   __add_typecast (DataType_Type user_type, DataType_Type totype, Ref_Type func)
  7909.  
  7910.  DESCRIPTION
  7911.   The `__add_typecast' function specifies a function to be called
  7912.   to typecast the user-defined type to an object of type
  7913.   `totype'.  The function must be defined to take a single
  7914.   argument (the user-type to be converted) and must return an object
  7915.   of type `totype'.
  7916.  
  7917.  SEE ALSO
  7918.   __add_unary, __add_binary, __add_destroy, __add_string
  7919.  
  7920. --------------------------------------------------------------
  7921.  
  7922. __add_unary
  7923.  
  7924.  SYNOPSIS
  7925.   Extend a unary operator to a user-defined type
  7926.  
  7927.  USAGE
  7928.   __add_unary (op, return_type, unary_func, user_type)
  7929.  
  7930.    String_Type op;
  7931.    Ref_Type unary_func;
  7932.    DataType_Type return_type, user_type;
  7933.  
  7934.  
  7935.  DESCRIPTION
  7936.   The `__add_unary' function is used to define the action of an
  7937.   unary operation on a user-defined type.  The first parameter
  7938.   `op' must be a valid unary operator
  7939.  
  7940.    "-", "not", "~"
  7941.  
  7942.   or one of the following:
  7943.  
  7944.    "++", "--",
  7945.    "abs", "sign", "sqr", "mul2", "_ispos", "_isneg", "_isnonneg",
  7946.  
  7947.   The third parameter, `unary_func' specifies the function to be
  7948.   called to carry out the specified unary operation on the data type
  7949.   `user_type'.  The result of the operation is indicated by the
  7950.   value of the `return_type' parameter and must also be the
  7951.   return type of the unary function.
  7952.  
  7953.  EXAMPLE
  7954.   The example for the `__add_binary' function defined a
  7955.   `Vector_Type' object.  Here, the unary `"-"' and
  7956.   `"abs"' operators are
  7957.   extended to this type:
  7958.  
  7959.    static define vector_chs (v)
  7960.    {
  7961.       variable v1 = @Vector_Type;
  7962.       v1.x = -v.x;
  7963.       v1.y = -v.y;
  7964.       v1.z = -v.z;
  7965.       return v1;
  7966.    }
  7967.    static define vector_abs (v)
  7968.    {
  7969.       return sqrt (v.x*v.x + v.y*v.y + v.z*v.z);
  7970.    }
  7971.    __add_unary ("-", Vector_Type, &vector_chs, Vector_Type);
  7972.    __add_unary ("abs", Double_Type, &vector_abs, Vector_Type);
  7973.  
  7974.  
  7975.  SEE ALSO
  7976.   __add_binary, __add_string, __add_destroy
  7977.  
  7978. --------------------------------------------------------------
  7979.  
  7980. get_struct_field
  7981.  
  7982.  SYNOPSIS
  7983.   Get the value associated with a structure field
  7984.  
  7985.  USAGE
  7986.   x = get_struct_field (Struct_Type s, String field_name)
  7987.  
  7988.  DESCRIPTION
  7989.    The `get_struct_field' function gets the value of the field
  7990.    whose name is specified by `field_name' of the structure `s'.
  7991.  
  7992.  EXAMPLE
  7993.    The following example illustrates how this function may be used to
  7994.    to print the value of a structure.
  7995.  
  7996.       define print_struct (s)
  7997.       {
  7998.          variable name;
  7999.  
  8000.          foreach (get_struct_field_names (s))
  8001.            {
  8002.              name = ();
  8003.              value = get_struct_field (s, name);
  8004.              vmessage ("s.%s = %s\n", name, string(value));
  8005.            }
  8006.       }
  8007.  
  8008.  
  8009.  SEE ALSO
  8010.   set_struct_field, get_struct_field_names, array_info
  8011.  
  8012. --------------------------------------------------------------
  8013.  
  8014. get_struct_field_names
  8015.  
  8016.  SYNOPSIS
  8017.   Retrieve the field names associated with a structure
  8018.  
  8019.  USAGE
  8020.   String_Type[] = get_struct_field_names (Struct_Type s)
  8021.  
  8022.  DESCRIPTION
  8023.    The `get_struct_field_names' function returns an array of
  8024.    strings whose elements specify the names of the fields of the
  8025.    struct `s'.
  8026.  
  8027.  EXAMPLE
  8028.    The following example illustrates how the
  8029.    `get_struct_field_names' function may be used to print the
  8030.    value of a structure.
  8031.  
  8032.       define print_struct (s)
  8033.       {
  8034.          variable name, value;
  8035.  
  8036.          foreach (get_struct_field_names (s))
  8037.            {
  8038.              name = ();
  8039.              value = get_struct_field (s, name);
  8040.              vmessage ("s.%s = %s\n", name, string (value));
  8041.            }
  8042.       }
  8043.  
  8044.  
  8045.  SEE ALSO
  8046.   _push_struct_field_values, get_struct_field
  8047.  
  8048. --------------------------------------------------------------
  8049.  
  8050. is_struct_type
  8051.  
  8052.  SYNOPSIS
  8053.   Determine whether or not an object is a structure
  8054.  
  8055.  USAGE
  8056.   Integer_Type is_struct_type (X)
  8057.  
  8058.  DESCRIPTION
  8059.   The `is_struct_type' function returns 1 if the parameter
  8060.   refers to a structure or a user-defined type.  If the object is
  8061.   neither, 0 will be returned.
  8062.  
  8063.  SEE ALSO
  8064.   typeof, _typeof, _is_struct_type
  8065.  
  8066. --------------------------------------------------------------
  8067.  
  8068. _push_struct_field_values
  8069.  
  8070.  SYNOPSIS
  8071.   Push the values of a structure's fields onto the stack
  8072.  
  8073.  USAGE
  8074.   Integer_Type num = _push_struct_field_values (Struct_Type s)
  8075.  
  8076.  DESCRIPTION
  8077.   The `_push_struct_field_values' function pushes the values of
  8078.   all the fields of a structure onto the stack, returning the
  8079.   number of items pushed.  The fields are pushed such that the last
  8080.   field of the structure is pushed first.
  8081.  
  8082.  SEE ALSO
  8083.   get_struct_field_names, get_struct_field
  8084.  
  8085. --------------------------------------------------------------
  8086.  
  8087. set_struct_field
  8088.  
  8089.  SYNOPSIS
  8090.   Set the value associated with a structure field
  8091.  
  8092.  USAGE
  8093.   set_struct_field (s, field_name, field_value)
  8094.  
  8095.    Struct_Type s;
  8096.    String_Type field_name;
  8097.    Generic_Type field_value;
  8098.  
  8099.  
  8100.  DESCRIPTION
  8101.    The `set_struct_field' function sets the value of the field
  8102.    whose name is specified by `field_name' of the structure
  8103.    `s' to `field_value'.
  8104.  
  8105.  SEE ALSO
  8106.   get_struct_field, get_struct_field_names, set_struct_fields, array_info
  8107.  
  8108. --------------------------------------------------------------
  8109.  
  8110. set_struct_fields
  8111.  
  8112.  SYNOPSIS
  8113.   Set the fields of a structure
  8114.  
  8115.  USAGE
  8116.   set_struct_fields (Struct_Type s, ...)
  8117.  
  8118.  DESCRIPTION
  8119.   The `set_struct_fields' function may be used to set zero or more
  8120.   fields of a structure.  The fields are set in the order in which
  8121.   they were created when the structure was defined.
  8122.  
  8123.  EXAMPLE
  8124.  
  8125.     variable s = struct { name, age, height };
  8126.     set_struct_fields (s, "Bill", 13, 64);
  8127.  
  8128.  
  8129.  SEE ALSO
  8130.   set_struct_field, get_struct_field_names
  8131.  
  8132. --------------------------------------------------------------
  8133.  
  8134. ctime
  8135.  
  8136.  SYNOPSIS
  8137.   Convert a calendar time to a string
  8138.  
  8139.  USAGE
  8140.   String_Type ctime(Long_Type secs)
  8141.  
  8142.  DESCRIPTION
  8143.   This function returns a string representation of the time as given
  8144.   by `secs' seconds since 00:00:00 UTC, Jan 1, 1970.
  8145.  
  8146.  SEE ALSO
  8147.   time, strftime, _time, localtime, gmtime
  8148.  
  8149. --------------------------------------------------------------
  8150.  
  8151. gmtime
  8152.  
  8153.  SYNOPSIS
  8154.   Break down a time in seconds to the GMT timezone
  8155.  
  8156.  USAGE
  8157.   Struct_Type gmtime (Long_Type secs)
  8158.  
  8159.  DESCRIPTION
  8160.    The `gmtime' function is exactly like `localtime' except
  8161.    that the values in the structure it returns are with respect to GMT
  8162.    instead of the local timezone.  See the documentation for
  8163.    `localtime' for more information.
  8164.  
  8165.  NOTES
  8166.    On systems that do not support the `gmtime' C library function,
  8167.    this function is the same as `localtime'.
  8168.  
  8169.  SEE ALSO
  8170.   localtime, _time, mktime
  8171.  
  8172. --------------------------------------------------------------
  8173.  
  8174. localtime
  8175.  
  8176.  SYNOPSIS
  8177.   Break down a time in seconds to the local timezone
  8178.  
  8179.  USAGE
  8180.   Struct_Type localtime (Long_Type secs)
  8181.  
  8182.  DESCRIPTION
  8183.    The `localtime' function takes a parameter `secs'
  8184.    representing the number of seconds since 00:00:00, January 1 1970
  8185.    UTC and returns a structure containing information about `secs'
  8186.    in the local timezone.  The structure contains the following
  8187.    Int_Type fields:
  8188.  
  8189.    `tm_sec' The number of seconds after the minute, normally
  8190.       in the range 0 to 59, but can be up to 61 to allow for
  8191.       leap seconds.
  8192.  
  8193.    `tm_min' The number of minutes after the hour, in the
  8194.       range 0 to 59.
  8195.  
  8196.    `tm_hour' The number of hours past midnight, in the range
  8197.       0 to 23.
  8198.  
  8199.    `tm_mday' The day of the month, in the range 1 to 31.
  8200.  
  8201.    `tm_mon' The number of months since January, in the range
  8202.       0 to 11.
  8203.  
  8204.    `tm_year' The number of years since 1900.
  8205.  
  8206.    `tm_wday' The number of days since Sunday, in the range 0
  8207.       to 6.
  8208.  
  8209.    `tm_yday' The number of days since January 1, in the
  8210.       range 0 to 365.
  8211.  
  8212.    `tm_isdst' A flag that indicates whether daylight saving
  8213.       time is in effect at the time described.  The value is
  8214.       positive if daylight saving time is in effect, zero if it
  8215.       is not, and negative if the information is not available.
  8216.  
  8217.  SEE ALSO
  8218.   gmtime, _time, ctime, mktime
  8219.  
  8220. --------------------------------------------------------------
  8221.  
  8222. mktime
  8223.  
  8224.  SYNOPSIS
  8225.   Convert a time-structure to seconds
  8226.  
  8227.  USAGE
  8228.   secs = mktime (Struct_Type tm)
  8229.  
  8230.  DESCRIPTION
  8231.   The `mktime' function is essentially the inverse of the
  8232.   `localtime' function.  See the documentation for that function
  8233.   for more details.
  8234.  
  8235.  SEE ALSO
  8236.   localtime, gmtime, _time
  8237.  
  8238. --------------------------------------------------------------
  8239.  
  8240. strftime
  8241.  
  8242.  SYNOPSIS
  8243.   Format a date and time string
  8244.  
  8245.  USAGE
  8246.   str = strftime (String_Type format [,Struct_Type tm])
  8247.  
  8248.  DESCRIPTION
  8249.   The `strftime' creates a date and time string according to a
  8250.   specified format.  If called with a single argument, the current
  8251.   local time will be used as the reference time.  If called with two
  8252.   arguments, the second argument specifies the reference time, and
  8253.   must be a structure with the same fields as the structure returned
  8254.   by the `localtime' function.
  8255.  
  8256.   The format string may be composed of one or more of the following
  8257.   format descriptors:
  8258.  
  8259.        %A      full weekday name (Monday)
  8260.        %a      abbreviated weekday name (Mon)
  8261.        %B      full month name (January)
  8262.        %b      abbreviated month name (Jan)
  8263.        %c      standard date and time representation
  8264.        %d      day-of-month (01-31)
  8265.        %H      hour (24 hour clock) (00-23)
  8266.        %I      hour (12 hour clock) (01-12)
  8267.        %j      day-of-year (001-366)
  8268.        %M      minute (00-59)
  8269.        %m      month (01-12)
  8270.        %p      local equivalent of AM or PM
  8271.        %S      second (00-59)
  8272.        %U      week-of-year, first day sunday (00-53)
  8273.        %W      week-of-year, first day monday (00-53)
  8274.        %w      weekday (0-6, sunday is 0)
  8275.        %X      standard time representation
  8276.        %x      standard date representation
  8277.        %Y      year with century
  8278.        %y      year without century (00-99)
  8279.        %Z      timezone name
  8280.        %%      percent sign
  8281.  
  8282.  as well as any others provided by the C library.  The actual values
  8283.  represented by the format descriptors are locale-dependent.
  8284.  
  8285.  EXAMPLE
  8286.  
  8287.     message (strftime ("Today is %A, day %j of the year"));
  8288.     tm = localtime (0);
  8289.     message (strftime ("Unix time 0 was on a %A", tm));
  8290.  
  8291.  
  8292.  SEE ALSO
  8293.   localtime, time
  8294.  
  8295. --------------------------------------------------------------
  8296.  
  8297. _tic
  8298.  
  8299.  SYNOPSIS
  8300.   Reset the CPU timer
  8301.  
  8302.  USAGE
  8303.   _tic ()
  8304.  
  8305.  DESCRIPTION
  8306.   The `_tic' function resets the internal CPU timer.  The
  8307.  `_toc' may be used to read this timer.  See the documentation
  8308.  for the `_toc' function for more information.
  8309.  
  8310.  EXAMPLE
  8311.  
  8312.  SEE ALSO
  8313.   _toc, times, tic, toc
  8314.  
  8315. --------------------------------------------------------------
  8316.  
  8317. tic
  8318.  
  8319.  SYNOPSIS
  8320.   Reset the interval timer
  8321.  
  8322.  USAGE
  8323.   void tic ()
  8324.  
  8325.  DESCRIPTION
  8326.   The `tic' function resets the internal interval timer.  The
  8327.  `toc' may be used to read the interval timer.
  8328.  
  8329.  EXAMPLE
  8330.   The tic/toc functions may be used to measure execution times.  For
  8331.  example, at the `slsh' prompt, they may be used to measure the speed
  8332.  of a loop:
  8333.  
  8334.    slsh> tic; loop (500000); toc;
  8335.    0.06558
  8336.  
  8337.  
  8338.  NOTES
  8339.   On Unix, this timer makes use of the C library `gettimeofday'
  8340.   function.
  8341.  
  8342.  SEE ALSO
  8343.   toc, times
  8344.  
  8345. --------------------------------------------------------------
  8346.  
  8347. _time
  8348.  
  8349.  SYNOPSIS
  8350.   Get the current calendar time in seconds
  8351.  
  8352.  USAGE
  8353.   Long_Type _time ()
  8354.  
  8355.  DESCRIPTION
  8356.   The `_time' function returns the number of elapsed seconds since
  8357.   00:00:00 UTC, January 1, 1970.  A number of functions (`ctime',
  8358.   `gmtime', `localtime', etc.) are able to convert such a
  8359.   value to other representations.
  8360.  
  8361.  SEE ALSO
  8362.   ctime, time, localtime, gmtime
  8363.  
  8364. --------------------------------------------------------------
  8365.  
  8366. time
  8367.  
  8368.  SYNOPSIS
  8369.   Return the current date and time as a string
  8370.  
  8371.  USAGE
  8372.   String_Type time ()
  8373.  
  8374.  DESCRIPTION
  8375.   This function returns the current time as a string of the form:
  8376.  
  8377.     Sun Apr 21 13:34:17 1996
  8378.  
  8379.  
  8380.  SEE ALSO
  8381.   strftime, ctime, message, substr
  8382.  
  8383. --------------------------------------------------------------
  8384.  
  8385. times
  8386.  
  8387.  SYNOPSIS
  8388.   Get process times
  8389.  
  8390.  USAGE
  8391.   Struct_Type times ()
  8392.  
  8393.  DESCRIPTION
  8394.   The `times' function returns a structure containing the
  8395.   following fields:
  8396.  
  8397.     tms_utime     (user time)
  8398.     tms_stime     (system time)
  8399.     tms_cutime    (user time of child processes)
  8400.     tms_cstime    (system time of child processes)
  8401.  
  8402.  
  8403.  NOTES
  8404.   Not all systems support this function.
  8405.  
  8406.  SEE ALSO
  8407.   _tic, _toc, _time
  8408.  
  8409. --------------------------------------------------------------
  8410.  
  8411. _toc
  8412.  
  8413.  SYNOPSIS
  8414.   Get the elapsed CPU time for the current process
  8415.  
  8416.  USAGE
  8417.   Double_Type _toc ()
  8418.  
  8419.  DESCRIPTION
  8420.   The `_toc' function returns the elapsed CPU time in seconds since
  8421.   the last call to `_tic'.  The CPU time is the amount of time the
  8422.   CPU spent running the code of the current process.
  8423.  
  8424.  EXAMPLE
  8425.  
  8426.  NOTES
  8427.   This function may not be available on all systems.
  8428.  
  8429.   The implementation of this function is based upon the `times'
  8430.   system call.  The precision of the clock is system dependent and may
  8431.   not be very accurate for small time intervals.  For this reason, the
  8432.   tic/toc functions may be more useful for small time-intervals.
  8433.  
  8434.  SEE ALSO
  8435.   _tic, _tic, _toc, times, _time
  8436.  
  8437. --------------------------------------------------------------
  8438.  
  8439. toc
  8440.  
  8441.  SYNOPSIS
  8442.   Read the interval timer
  8443.  
  8444.  USAGE
  8445.   Double_Type toc ()
  8446.  
  8447.  DESCRIPTION
  8448.   The `toc' function returns the elapsed time in seconds since
  8449.   the last call to `tic'.  See the documentation for the
  8450.  `tic' function for more information.
  8451.  
  8452.  SEE ALSO
  8453.   tic, _tic, _toc, times, _time
  8454.  
  8455. --------------------------------------------------------------
  8456.  
  8457. atof
  8458.  
  8459.  SYNOPSIS
  8460.   Convert a string to a double precision number
  8461.  
  8462.  USAGE
  8463.   Double_Type atof (String_Type s)
  8464.  
  8465.  DESCRIPTION
  8466.   This function converts a string `s' to a double precision value
  8467.   and returns the result.  It performs no error checking on the format
  8468.   of the string.  The function `_slang_guess_type' may be used to
  8469.   check the syntax of the string.
  8470.  
  8471.  EXAMPLE
  8472.  
  8473.      define error_checked_atof (s)
  8474.      {
  8475.         if (__is_datatype_numeric (_slang_guess_type (s)))
  8476.           return atof (s);
  8477.         throw InvalidParmError, "$s is not a double"$;
  8478.     }
  8479.  
  8480.  
  8481.  SEE ALSO
  8482.   typecast, double, _slang_guess_type
  8483.  
  8484. --------------------------------------------------------------
  8485.  
  8486. atoi
  8487.  
  8488.  SYNOPSIS
  8489.   Convert a string to an integer
  8490.  
  8491.  USAGE
  8492.   Int_Type atoi (String_Type str)
  8493.  
  8494.  DESCRIPTION
  8495.   The `atoi' function converts a string to an `Int_Type'
  8496.   using the standard C library function of the corresponding name.
  8497.  
  8498.  NOTES
  8499.   This function performs no syntax checking upon its argument.
  8500.  
  8501.  SEE ALSO
  8502.   integer, atol, atoll, atof, sscanf
  8503.  
  8504. --------------------------------------------------------------
  8505.  
  8506. atol
  8507.  
  8508.  SYNOPSIS
  8509.   Convert a string to an long integer
  8510.  
  8511.  USAGE
  8512.   Long_Type atol (String_Type str)
  8513.  
  8514.  DESCRIPTION
  8515.   The `atol' function converts a string to a `Long_Type'
  8516.   using the standard C library function of the corresponding name.
  8517.  
  8518.  NOTES
  8519.   This function performs no syntax checking upon its argument.
  8520.  
  8521.  SEE ALSO
  8522.   integer, atoi, atoll, atof, sscanf
  8523.  
  8524. --------------------------------------------------------------
  8525.  
  8526. atoll
  8527.  
  8528.  SYNOPSIS
  8529.   Convert a string to a long long
  8530.  
  8531.  USAGE
  8532.   LLong_Type atoll (String_Type str)
  8533.  
  8534.  DESCRIPTION
  8535.   The `atoll' function converts a string to a `LLong_Type'
  8536.   using the standard C library function of the corresponding name.
  8537.  
  8538.  NOTES
  8539.   This function performs no syntax checking upon its argument.  Not
  8540.   all platforms provide support for the long long data type.
  8541.  
  8542.  SEE ALSO
  8543.   integer, atoi, atol, atof, sscanf
  8544.  
  8545. --------------------------------------------------------------
  8546.  
  8547. char
  8548.  
  8549.  SYNOPSIS
  8550.   Convert a character code to a string
  8551.  
  8552.  USAGE
  8553.   String_Type char (Integer_Type c)
  8554.  
  8555.  DESCRIPTION
  8556.   The `char' function converts an integer character code (ascii)
  8557.   value `c' to a string of unit character length such that the
  8558.   first character of the string is `c'.  For example,
  8559.   `char('a')' returns the string `"a"'.
  8560.  
  8561.   If UTF-8 mode is in effect  (`_slang_utf8_ok' is non-zero), the
  8562.   resulting single character may be represented by several bytes.
  8563.  
  8564.   If the character code `c' is less than 0, then byte-semantics
  8565.   will be used with the resulting string consisting of a single byte
  8566.   whose value is that of `-c&0xFF'.
  8567.  
  8568.  NOTES
  8569.   A better name should have been chosen for this function.
  8570.  
  8571.  SEE ALSO
  8572.   integer, string, typedef, sprintf
  8573.  
  8574. --------------------------------------------------------------
  8575.  
  8576. define_case
  8577.  
  8578.  SYNOPSIS
  8579.   Define upper-lower case conversion
  8580.  
  8581.  USAGE
  8582.   define_case (Integer_Type ch_up, Integer_Type ch_low)
  8583.  
  8584.  DESCRIPTION
  8585.   This function defines an upper and lowercase relationship between two
  8586.   characters specified by the arguments.  This relationship is used by
  8587.   routines which perform uppercase and lowercase conversions.
  8588.   The first integer `ch_up' is the ascii value of the uppercase character
  8589.   and the second parameter `ch_low' is the ascii value of its
  8590.   lowercase counterpart.
  8591.  
  8592.  NOTES
  8593.   This function has no effect in UTF-8 mode.
  8594.  
  8595.  SEE ALSO
  8596.   strlow, strup
  8597.  
  8598. --------------------------------------------------------------
  8599.  
  8600. double
  8601.  
  8602.  SYNOPSIS
  8603.   Convert an object to double precision
  8604.  
  8605.  USAGE
  8606.   Double_Type double (x)
  8607.  
  8608.  DESCRIPTION
  8609.   The `double' function typecasts an object `x' to double
  8610.   precision.  For example, if `x' is an array of integers, an
  8611.   array of double types will be returned.  If an object cannot be
  8612.   converted to `Double_Type', a type-mismatch error will result.
  8613.  
  8614.  NOTES
  8615.   The `double' function is equivalent to the typecast operation
  8616.  
  8617.      typecast (x, Double_Type)
  8618.  
  8619.   To convert a string to a double precision number, use the `atof'
  8620.   function.
  8621.  
  8622.  SEE ALSO
  8623.   typecast, atof, int
  8624.  
  8625. --------------------------------------------------------------
  8626.  
  8627. int
  8628.  
  8629.  SYNOPSIS
  8630.   Typecast an object to an integer
  8631.  
  8632.  USAGE
  8633.   Int_Type int (s)
  8634.  
  8635.  DESCRIPTION
  8636.   This function performs a typecast of an object `s' to
  8637.   an object of Integer_Type.  If `s' is a string, it returns
  8638.   returns the ascii value of the first bytes of the string
  8639.   `s'.  If `s' is Double_Type, `int' truncates the
  8640.   number to an integer and returns it.
  8641.  
  8642.  EXAMPLE
  8643.   `int' can be used to convert single byte strings to
  8644.   integers.  As an example, the intrinsic function `isdigit' may
  8645.   be defined as
  8646.  
  8647.     define isdigit (s)
  8648.     {
  8649.       if ((int (s) >= '0') and (int (s) <= '9')) return 1;
  8650.       return 0;
  8651.     }
  8652.  
  8653.  
  8654.  NOTES
  8655.   This function is equivalent to `typecast (s, Integer_Type)';
  8656.  
  8657.  SEE ALSO
  8658.   typecast, double, integer, char, isdigit
  8659.  
  8660. --------------------------------------------------------------
  8661.  
  8662. integer
  8663.  
  8664.  SYNOPSIS
  8665.   Convert a string to an integer
  8666.  
  8667.  USAGE
  8668.   Integer_Type integer (String_Type s)
  8669.  
  8670.  DESCRIPTION
  8671.   The `integer' function converts a string representation of an
  8672.   integer back to an integer.  If the string does not form a valid
  8673.   integer, a SyntaxError will be thrown.
  8674.  
  8675.  EXAMPLE
  8676.   `integer ("1234")' returns the integer value `1234'.
  8677.  
  8678.  NOTES
  8679.   This function operates only on strings and is not the same as the
  8680.   more general `typecast' operator.
  8681.  
  8682.  SEE ALSO
  8683.   typecast, _slang_guess_type, string, sprintf, char
  8684.  
  8685. --------------------------------------------------------------
  8686.  
  8687. isdigit
  8688.  
  8689.  SYNOPSIS
  8690.   Tests for a decimal digit character
  8691.  
  8692.  USAGE
  8693.   Integer_Type isdigit (s)
  8694.  
  8695.  DESCRIPTION
  8696.   This function returns a non-zero value if the character represented
  8697.   by `s' is a digit; otherwise, it returns zero.  If `s' is
  8698.   a string, the first character of `s' will be used for the test.
  8699.  
  8700.  EXAMPLE
  8701.   A simple, user defined implementation of `isdigit' is
  8702.  
  8703.     define isdigit (x)
  8704.     {
  8705.        return ((x <= '9') and (x >= '0'));
  8706.     }
  8707.  
  8708.   However, the intrinsic function `isdigit' executes many times faster
  8709.   than the representation defined above, and works properly when
  8710.   `x' is a Unicode character.
  8711.  
  8712.  SEE ALSO
  8713.   int, integer
  8714.  
  8715. --------------------------------------------------------------
  8716.  
  8717. _slang_guess_type
  8718.  
  8719.  SYNOPSIS
  8720.   Guess the data type that a string represents
  8721.  
  8722.  USAGE
  8723.   DataType_Type _slang_guess_type (String_Type s)
  8724.  
  8725.  DESCRIPTION
  8726.   This function tries to determine whether its argument `s'
  8727.   represents an integer (short, int, long), floating point (float,
  8728.   double), or a complex number.  If it appears to be none of these,
  8729.   then a string is assumed.  It returns one of the following values
  8730.   depending on the format of the string `s':
  8731.  
  8732.     Short_Type     :  short integer           (e.g., "2h")
  8733.     UShort_Type    :  unsigned short integer  (e.g., "2hu")
  8734.     Integer_Type   :  integer                 (e.g., "2")
  8735.     UInteger_Type  :  unsigned integer        (e.g., "2")
  8736.     Long_Type      :  long integer            (e.g., "2l")
  8737.     ULong_Type     :  unsigned long integer   (e.g., "2l")
  8738.     Float_Type     :  float                   (e.g., "2.0f")
  8739.     Double_Type    :  double                  (e.g., "2.0")
  8740.     Complex_Type   :  imaginary               (e.g., "2i")
  8741.     String_Type    :  Anything else.          (e.g., "2foo")
  8742.  
  8743.   For example, `_slang_guess_type("1e2")' returns
  8744.   Double_Type but `_slang_guess_type("e12")' returns
  8745.   String_Type.
  8746.  
  8747.  SEE ALSO
  8748.   integer, string, double, atof, __is_datatype_numeric
  8749.  
  8750. --------------------------------------------------------------
  8751.  
  8752. string
  8753.  
  8754.  SYNOPSIS
  8755.   Convert an object to a string representation.
  8756.  
  8757.  USAGE
  8758.   String_Type string (obj)
  8759.  
  8760.  DESCRIPTION
  8761.    The `string' function may be used to convert an object
  8762.    `obj' of any type to its string representation.
  8763.    For example, `string(12.34)' returns `"12.34"'.
  8764.  
  8765.  EXAMPLE
  8766.  
  8767.      define print_anything (anything)
  8768.      {
  8769.         message (string (anything));
  8770.      }
  8771.  
  8772.  
  8773.  NOTES
  8774.    This function is _not_ the same as typecasting to a String_Type
  8775.    using the `typecast' function.
  8776.  
  8777.  SEE ALSO
  8778.   typecast, sprintf, integer, char
  8779.  
  8780. --------------------------------------------------------------
  8781.  
  8782. tolower
  8783.  
  8784.  SYNOPSIS
  8785.   Convert a character to lowercase.
  8786.  
  8787.  USAGE
  8788.   Integer_Type lower (Integer_Type ch)
  8789.  
  8790.  DESCRIPTION
  8791.   This function takes an integer `ch' and returns its lowercase
  8792.   equivalent.
  8793.  
  8794.  SEE ALSO
  8795.   toupper, strup, strlow, int, char, define_case
  8796.  
  8797. --------------------------------------------------------------
  8798.  
  8799. toupper
  8800.  
  8801.  SYNOPSIS
  8802.   Convert a character to uppercase.
  8803.  
  8804.  USAGE
  8805.   Integer_Type toupper (Integer_Type ch)
  8806.  
  8807.  DESCRIPTION
  8808.   This function takes an integer `ch' and returns its uppercase
  8809.   equivalent.
  8810.  
  8811.  SEE ALSO
  8812.   tolower, strup, strlow, int, char, define_case
  8813.  
  8814. --------------------------------------------------------------
  8815.  
  8816. typecast
  8817.  
  8818.  SYNOPSIS
  8819.   Convert an object from one data type to another.
  8820.  
  8821.  USAGE
  8822.   typecast (x, new_type)
  8823.  
  8824.  DESCRIPTION
  8825.   The `typecast' function performs a generic typecast operation on
  8826.   `x' to convert it to `new_type'.  If `x' represents an
  8827.   array, the function will attempt to convert all elements of `x'
  8828.   to `new_type'.  Not all objects can be converted and a
  8829.   type-mismatch error will result upon failure.
  8830.  
  8831.  EXAMPLE
  8832.  
  8833.     define to_complex (x)
  8834.     {
  8835.        return typecast (x, Complex_Type);
  8836.     }
  8837.  
  8838.   defines a function that converts its argument, `x' to a complex
  8839.   number.
  8840.  
  8841.  SEE ALSO
  8842.   int, double, typeof
  8843.  
  8844. --------------------------------------------------------------
  8845.  
  8846. _typeof
  8847.  
  8848.  SYNOPSIS
  8849.   Get the data type of an object
  8850.  
  8851.  USAGE
  8852.   DataType_Type _typeof (x)
  8853.  
  8854.  DESCRIPTION
  8855.   This function is similar to the `typeof' function except in the
  8856.   case of arrays.  If the object `x' is an array, then the data
  8857.   type of the array will be returned. otherwise `_typeof' returns
  8858.   the data type of `x'.
  8859.  
  8860.  EXAMPLE
  8861.  
  8862.     if (Integer_Type == _typeof (x))
  8863.       message ("x is an integer or an integer array");
  8864.  
  8865.  
  8866.  SEE ALSO
  8867.   typeof, array_info, _slang_guess_type, typecast
  8868.  
  8869. --------------------------------------------------------------
  8870.  
  8871. typeof
  8872.  
  8873.  SYNOPSIS
  8874.   Get the data type of an object
  8875.  
  8876.  USAGE
  8877.   DataType_Type typeof (x)
  8878.  
  8879.  DESCRIPTION
  8880.   This function returns the data type of `x'.
  8881.  
  8882.  EXAMPLE
  8883.  
  8884.   if (Integer_Type == typeof (x)) message ("x is an integer");
  8885.  
  8886.  
  8887.  SEE ALSO
  8888.   _typeof, is_struct_type, array_info, _slang_guess_type, typecast
  8889.  
  8890. --------------------------------------------------------------
  8891.